冒泡排序与鸡尾酒排序

 

冒泡排序


基本思想冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。

算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。

鸡尾酒排序

鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的性能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。

以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。但是在随机数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲。

Array.prototype.bubble_sort= function() {

     int i, j;

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

          for (j = 0; j < len - 1 - i; j++)

             if (arr[j] > arr[j + 1])

              swap(arr[j], arr[j + 1]);

     }

JavaScript  实现鸡尾酒排序

Array.prototype.cocktail_sort = function() {
	var i, left = 0, right = this.length - 1;
	var temp;
	while (left < right) {
		for (i = left; i < right; i++)
			if (this[i] > this[i + 1]) {
				temp = this[i];
				this[i] = this[i + 1];
				this[i + 1] = temp;
			}
		right--;
		for (i = right; i > left; i--)
			if (this[i - 1] > this[i]) {
				temp = this[i];
				this[i] = this[i - 1];
				this[i - 1] = temp;
			}
		left++;
	}
};

复杂度

鸡尾酒排序最糟或是平均所花费的次数都是O(n^2),但如果序列在一开始已经大部分排序过的话,会接近O(n).

猜你喜欢

转载自blog.csdn.net/tingguang3530/article/details/81289558