关于c#:为什么这个程序不对数组进行排序?

Why will this program not sort the array?

我知道在C语言中有一个排序函数可以将数组排序成正确的顺序,但是出于原因,我需要使用自己的代码。

我已经想出了这个办法,有些数字会移动,但它永远不会完全分类。有人知道为什么吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static void Main(string[] args)
    {
        int[] arraySort = { 2, 5, 7, 3, 6, 3 };
        int save;
        bool sorted = false;

        while(sorted == false) {
            for (int i = 0; i < (arraySort.Length - 1); i++)
            {
                sorted = true;
                if (arraySort[i] > arraySort[i + 1])
                {
                    save = arraySort[i];
                    arraySort[i] = arraySort[i + 1];
                    arraySort[i + 1] = save;
                    sorted = false;
                }
            }
        }

        for (int i = 0; i < arraySort.Length; i++)
        {
            Console.WriteLine(arraySort[i]);
        }
    }

我的输出结果是:

2 3 5 3 6 7


每次迭代时都将sorted设置为true,您需要在for循环之外的while和for之间执行sorted=true。

1
2
3
4
5
6
7
8
9
10
11
12
13
while (sorted == false) {
            sorted = true;// here seems like the right place!
            for (int i = 0; i < (arraySort.Length - 1); i++)
            {    
                if (arraySort[i] > arraySort[i + 1])
                {
                    save = arraySort[i];
                    arraySort[i] = arraySort[i + 1];
                    arraySort[i + 1] = save;
                    sorted = false;
                }
            }
        }

您在for循环中设置了sorted = true

所以只要倒数第二个条目小于最后一个条目,它就会停止。验证外部循环时忽略所有其他检查


为什么不直接做:

1
arraySort = arraySort.OrderBy(x => x).ToArray();