我在C ++中遇到了很多不同的冒泡排序算法实现。我现在列出几个(只是几条彼此不同的线),所以有人可以告诉我不同之处。我注意到有些人使用while循环并且它有点不同,但是通过数组的行仍然是相同的。
这些代码示例是使用for循环遍历数组的代码。
示例1:
for (int i=0; i<size-1); i++)
for (int j=i+1; j<size; j++)
//swap lines
示例2:
for (int j=0; j<(size-1); j++)
//swap lines
那有什么区别?第二个每次都经过整个数组,第一个每次经过1次? 我知道算法通过数组,交换它并且没有必要再次回到数组的第一个元素,所以我猜第一个更好。
此外,c ++中冒泡排序的最佳实现是什么(如果可以,请包括代码)?
答案 0 :(得分:3)
冒泡排序是O(n ^ 2),因此总是会像示例1中那样具有嵌套循环,或者等效于它的其他东西。示例2将使用一些其他构造(可能是递归)来实现相同的目标。
没有一个最好的实施方案。不同的实现方式在不同方面更好。冒泡排序有时用于在接近排序顺序的列表上快速运行排序。利用此属性的版本将在有序列表上运行得更快,但在完全随机的列表上运行速度可能会慢一些。