Click here to Skip to main content
15,883,749 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
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 3-May-19 23:08pm

1 solution

C#
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:
C#
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]
}
 
Share this answer
 

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900