双向冒泡排序c#

时间:2013-04-05 08:35:28

标签: c# algorithm sorting

我有编写双向冒泡排序的作业。有人可以看看我的逻辑是否正确。我不想要代码,因为我想自己搞清楚。我只想对我的理解进行逻辑检查。

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

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

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

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

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

由于

2 个答案:

答案 0 :(得分:3)

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

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

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

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

编辑 "optimized"冒泡排序会跳过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>);

答案 1 :(得分:2)

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

而不是每次从下到上传递列表(冒泡排序),您从列表的开始一次从列表的顶部开始

维基百科文章在解释它方面做得更好:

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

- 富有