【问题标题】:Why will this program not sort the array?为什么这个程序不对数组进行排序?
【发布时间】:2015-12-27 05:33:35
【问题描述】:

我知道 C# 中有一个排序函数可以将数组排序为正确的顺序,但由于某些原因,我需要使用自己的代码来完成。

我想出了这个,一些数字移动了,但它从来没有完全排序。有人知道为什么吗?

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

【问题讨论】:

  • 排序 = true;放错地方了。

标签: c# arrays sorting


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您设置 sorted=true 您迭代的每个项目, 您需要在 for 循环之外,在 while 和 for 之间执行 sorted=true。

    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;
                    }
                }
            }
    

    【讨论】:

      【解决方案3】:

      为什么不直接做:

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

      【讨论】:

      • 因为......他在他的问题中表示,由于他不想进入的原因,他需要在自己的代码中执行此操作,而不是快速的单行解决方案。
      猜你喜欢
      • 2014-08-13
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多