14,431,034 members
Rate this:
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

Rate this:

## 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)

Top Experts
Last 24hrsThis month
 Richard Deeming 470 OriginalGriff 345 Maciej Los 280 phil.o 270 Wendelius 180
 OriginalGriff 6,033 Richard MacCutchan 2,544 phil.o 1,550 Patrice T 1,420 MadMyche 1,385

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