排序数字数组问题

Ani*_*esh 4 c# sorting

昨天在工作中我开始着手如何在不使用库方法的情况下对数字进行排序Array.Sort.我在时间允许的情况下上班和下班,最后能够在今天结束时提出基本的工作算法.它可能是相当愚蠢和最慢的方式,但我满足于我有一个有效的代码.

但是逻辑中有一些错误或缺失,导致输出在打印行之前挂起: Numbers Sorted. (12/17/2011 2:11:42 AM)

此延迟与阵列中元素的数量成正比.具体来说,输出只是挂在我将波浪号放在下面结果部分的位置.在明显延迟之后打印波尔德之后的内容.

以下是执行排序的代码:

while(pass != unsortedNumLen)
{
    for(int i=0,j=1; i < unsortedNumLen-1 && j < unsortedNumLen; i++,j++)
    {
        if (unsorted[i] > unsorted[j])
        {
            pass = 0;
            swaps++;
            Console.Write("Swapping {0} and {1}:\t", unsorted[i], unsorted[j]);
            tmp = unsorted[i];
            unsorted[i] = unsorted[j];
            unsorted[j] = tmp;
            printArray(unsorted);
        }

        else pass++;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Numbers unsorted. (12/17/2011 2:11:19 AM)

4 3 2 1
Swapping 4 and 3:       3 4 2 1
Swapping 4 and 2:       3 2 4 1
Swapping 4 and 1:       3 2 1 4
Swapping 3 and 2:       2 3 1 4
Swapping 3 and 1:       2 1 3 4
Swapping 2 and 1:       1 2 3 4
~
Numbers sorted. (12/17/2011 2:11:42 AM)

1 2 3 4
Number of swaps: 6
Run Code Online (Sandbox Code Playgroud)

我可以帮助您确定尝试的问题吗?

链接到完整代码
这不是功课,只是我锻炼.

Cod*_*nis 6

将你的情况改为:

while (pass < unsortedNumLen)
Run Code Online (Sandbox Code Playgroud)

逻辑上pass 永远不等于unsortedNumLen所以你的while意志不会终止.

passunsortedNumLen当它超过a的最大值int并且循环到它时,它最终会相等.

为了查看处于挂起状态时自己发生了什么,只需点击Visual Studio中的暂停按钮,然后将鼠标悬停在上面pass,看它是否包含巨大的值.

您还可以在该while行上设置断点并为其添加监视pass.这将显示列表第一次排序,pass等于5.

  • *编辑*:我的不好,我误解了你的答案(也许是downvoter也是如此?)无论如何,我认为你的答案可以更明确(因为很明显`pass`确实在*某些*点上取正确值)但总的来说,这是正确的.考虑将"**never**"更改为"将需要很长时间",因为整个观点是`pass`将不断地循环,直到你变得幸运并最终在`unsortedNumLen`. (3认同)
  • @loudsight每次执行for循环时,肯定不会将其设置为零.如果数字已按顺序排列,则永远不执行if块,只执行else. (2认同)
  • 在它等于它之前,`pass`超过`unsortedNumLen`.:) (2认同)
  • @KishorNanda有道理.很高兴你在这里,了解你正在做的事情背后的原因! (2认同)