Sorting “怎么说?”;反向连续传球”;气泡排序的改进工作?

Sorting “怎么说?”;反向连续传球”;气泡排序的改进工作?,sorting,bubble-sort,Sorting,Bubble Sort,根据Tenenbaum使用C的数据结构,Bobble sort的改进之一是使连续的过程朝相反的方向进行,以便小元素快速移动到前面,从而减少所需的过程数[pg 336]。 我举出了两个例子,一个支持这一说法,另一个反对这一说法 Supports: 25 48 37 12 57 86 33 92 iterations using usual Bubble sort : 25 48 37 12 57 86 33 92 25 37 12 48 57 33 86 92 25 12

根据Tenenbaum使用C的数据结构,Bobble sort的改进之一是使连续的过程朝相反的方向进行,以便小元素快速移动到前面,从而减少所需的过程数[pg 336]。 我举出了两个例子,一个支持这一说法,另一个反对这一说法

Supports: 25 48 37 12 57 86 33 92
iterations using usual Bubble sort :
    25 48 37 12 57 86 33 92
    25 37 12 48 57 33 86 92
    25 12 37 48 33 57 86 92
    12 25 37 33 48 57 86 92
    12 25 33 37 48 57 86 92

iterations using improvement:
    25 48 37 12 57 86 33 92
    25 37 12 48 57 33 86 92
    12 25 37 33 48 57 86 92
    12 25 33 37 48 57 86 92

against: 3 4 1 2 5
iterations using usual Bubble sort:
    3 4 1 2 5
    3 1 2 4 5
    1 2 3 4 5

iterations using improvement:
    3 4 1 2 5
    3 1 2 4 5
    1 3 2 4 5
    1 2 3 4 5

那么,这种改进总是有帮助的说法是否不正确?或者我做错了什么?

您上面给出的示例表明,该算法并不是对标准冒泡排序的严格改进

这种方法(顺便说一句,有时称为“鸡尾酒排序”)的优点是,在数组末尾有许多小元素的情况下,与普通气泡排序相比,它会迅速将它们拉到前面。例如,考虑这个数组:

2 3 4 5 6 7 8 9 10 11 12 ... 10,000,000 1
使用普通的冒泡排序,需要9999999次遍历该数组才能对其进行排序,因为元素1在每次迭代中只向前交换了一步,而元素1是非常不合适的。另一方面,对于鸡尾酒类,这只需要两次传球——一次是初始传球,然后是反向传球

虽然上面的例子显然是人为设计的,但在随机排列的数组中,数组末尾可能会有一些较小的元素,而bubblesort的通过次数必须很大才能将它们移回。向两个方向移动有助于加快速度

也就是说,bubblesort是一个非常糟糕的排序算法选择,所以希望这只是一个理论讨论。:-)