Click here to Skip to main content
14,431,034 members
Rate this:
Please Sign up or sign in to vote.
See more:
This is the C# code. My problem is that it prints seven 1s and a 2, when it is supposed to print the vals list in order. (like a Sort).



using System;
using System.Collections.Generic;

namespace ConsoleApp5
{
    class Program
    {
        static void Main()
        {
            int[] vals = {6, 5, 3, 1, 8, 7, 2, 4};
            //List<int> vals = new List<int> { 6, 5, 3, 1, 8, 7, 2, 4 };
            int n = 8;
            

            for (int i = 0; i < n; i++)//<= or <?
            {
                
                for (int j = 0; j < n - 1; j += 1 )
                {
                    if (vals[j] > vals[j + 1])
                    {
                        vals[j] = vals[j + 1];
                        vals[j + 1] = vals[j];
                    }
                    
                }
            }

            foreach (int num in vals)
            {
                Console.WriteLine(vals[num]);
            }
            
            
            
            
        }
    }
}


and this is the python code:

vals = [6,5,3,1,8,7,2,4]

n = len(vals)
for i in range(n):
     for j in range(0, n-1):
            if vals[j] > vals[j+1]:
                      vals[j], vals[j+1] = vals[j+1], vals[j]

print(vals)


What I have tried:

I've tries changing it from an array to a list and vise versa, didn't change anything.
I've tried a lot of things with the loops, at present they work as intended.

Thank you.
Posted
Updated 4-May-19 0:08am

1 solution

Rate this:
Please Sign up or sign in to vote.

Solution 1

if (vals[j] > vals[j + 1])
{
    vals[j] = vals[j + 1];
    vals[j + 1] = vals[j];
}

You cannot exchange two cells like that. You set vals[j] to the value of vals[j + 1], and then set vals[j + 1] to the value of vals[j], which is already the previous value of vals[j + 1]. You need to copy the first item to a temporary variable like this:
if (vals[j] > vals[j + 1])
{
    int temp = vals[j]; // save original value
    vals[j] = vals[j + 1];
    vals[j + 1] = temp; // original value in vals[j]
}
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100