氣泡排序與雞尾酒排序
阿新 • • 發佈:2018-12-21
氣泡排序
基本思想氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。
演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小)的資料元素放到隊尾。
雞尾酒排序
雞尾酒排序等於是氣泡排序的輕微變形。不同的地方在於從低到高然後從高到低,而氣泡排序則僅從低到高去比較序列裡的每個元素。他可以得到比氣泡排序稍微好一點的效能,原因是氣泡排序只從一個方向進行比對(由低到高),每次迴圈只移動一個專案。
以序列(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).