鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。
以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。 但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲,优点只有观念简单这一点。鸡尾酒排序最糟或是平均所花费的次数都是,但如果序列在一开始已经大部分排序过的话,会接近。
c#代码
static int[] BubbleCocktailSort(int[] data) { bool flag; int m = 0, n = 0; for (int i = data.Count - 1; i > 0; i--) { flag = true; if (i % 2 == 0) { for (int j = n; j < data.Count - 1 - m; j++) { if (data[j] > data[j + 1]) { Swap(data, j, j + 1); flag = false; } } if (flag) break; m++; } else { for (int k = data.Count - 1 - m; k > n; k--) { if (data[k] < data[k - 1]) { Swap(data, k, k - 1); flag = false; } } if (flag) break; n++; } } return data; }