双向冒泡排序c#

本文关键字:冒泡排序 | 更新日期: 2023-09-27 18:07:49

我有一个编写双向冒泡排序的家庭作业。有人可以看看我的逻辑是否正确。我不想要代码,因为我想自己弄清楚。我只是想从逻辑上检查一下我是如何理解的。

正如我所理解的双向冒泡排序,你实现了2个for循环,一个从列表中的位置1开始,并执行正常的冒泡排序。当第一个for循环结束时,第二个for循环将以相反的方式实现。我只是不完全明白每个循环的终止条件是什么。

for循环的条件是否如下所示?

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

环2 - for(j = Count - i; j > i; j--)

在每个循环中指定交换条件。

谢谢

双向冒泡排序c#

"经典"冒泡排序在每次迭代时遍历整个数组,因此循环应该是

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

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

两个循环都跳过一个索引:第一个循环跳过最后一个索引,第二个循环跳过第一个索引。这样你的代码就可以安全地比较data[i]data[i+1], data[j]data[j-1]

EDIT"优化"的冒泡排序在k次迭代时跳过初始的k元素。由于冒泡排序是双向的,因此可以跳过初始的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>);

双向冒泡排序的工作原理如下:

不是每次从底部到顶部传递列表(冒泡排序),你从底部开始一次,从列表的顶部开始每隔一秒。

维基百科的文章做了更好的解释:

http://en.wikipedia.org/wiki/Cocktail_sort

——丰富的