1. 程式人生 > >氣泡排序與雞尾酒排序

氣泡排序與雞尾酒排序

 

氣泡排序


基本思想氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。

演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小)的資料元素放到隊尾。

雞尾酒排序

雞尾酒排序等於是氣泡排序的輕微變形。不同的地方在於從低到高然後從高到低,而氣泡排序則僅從低到高去比較序列裡的每個元素。他可以得到比氣泡排序稍微好一點的效能,原因是氣泡排序只從一個方向進行比對(由低到高),每次迴圈只移動一個專案。

以序列(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).