昨天在工作中我开始着手如何在不使用库方法的情况下对数字进行排序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)
我可以帮助您确定尝试的问题吗?
链接到完整代码
这不是功课,只是我锻炼.
将你的情况改为:
while (pass < unsortedNumLen)
Run Code Online (Sandbox Code Playgroud)
逻辑上pass 永远不等于unsortedNumLen所以你的while意志不会终止.
passunsortedNumLen当它超过a的最大值int并且循环到它时,它最终会相等.
为了查看处于挂起状态时自己发生了什么,只需点击Visual Studio中的暂停按钮,然后将鼠标悬停在上面pass,看它是否包含巨大的值.
您还可以在该while行上设置断点并为其添加监视pass.这将显示列表第一次排序,pass等于5.
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |