我有一个作业要写双向气泡排序。有人能看看我的逻辑是否正确吗我不想要代码,因为我想自己弄清楚。我只是想检查一下我是怎么理解的。
根据我对双向气泡排序的理解,您实现了两个for循环,一个从列表中的位置1开始,执行普通气泡排序。当第一个for循环到达末尾时,第二个for循环被实现为反向工作我只是不完全理解每个循环的终止条件是什么。
for循环条件是否如下所示?
回路1-for(i = 0; i < Count -i; i++)
回路2-for(j = Count - i; j > i; j--)
在每个循环中,将指定交换条件。
谢谢

最佳答案

“经典”气泡排序在每次迭代时都会遍历整个数组,因此循环应该是

for(i = 0; i < Count - 1; i++)


for(j = Count - 1; j > 0; j--)

两个循环都跳过一个索引:第一个循环跳过最后一个索引,而第二个循环跳过初始索引。这样代码就可以安全地比较data[i]data[i+1]data[j]data[j-1]
编辑气泡排序将跳过第次迭代中的初始元素。由于气泡排序是双向的,因此可以跳过初始k和尾部k元素,如下所示:
 int k = 0;
 do { // The outer loop
     ...
     for(int i = k; i < Count - k - 1; i++)
         ...
     for(int j = Count - k - 1; j > k ; j--)
         ...
     k++;
} while (<there were swaps>);

关于c# - 双向气泡排序C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15829339/

10-09 00:15