八大排序演算法(希爾排序、快速排序、堆排序)
阿新 • • 發佈:2018-12-11
希爾排序-插入排序的擴充套件
function shellSort(arr) {
var len = arr.length;
for (var fraction = Math.floor(len / 2); fraction > 0; fraction = Math.floor(fraction / 2)) {
for (var i = fraction; i < len; i++) {
for (var j = i - fraction; j >= 0 && arr[j] > arr[fraction + j]; j -= fraction) {
var temp = arr[j];
arr[j] = arr[fraction + j];
arr[fraction + j] = temp;
}
}
}
return arr;
}
var arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 04];
console.log(shellSort(arr));
function swap(array, i, j){//兩個數調換
var temp =array[j];
array[j]=array[i];
array[i]=temp;
};
function shellSort(arr) {
var len = arr.length;
for (var fraction = Math.floor(len / 2); fraction > 0; fraction = Math.floor(fraction / 2)) {
for (var i = fraction; i < len; i++) {
for (var j = i - fraction; j >= 0 && arr[j] > arr[fraction + j]; j -= fraction) {
swap(arr,j,fraction + j);
}
}
}
return arr;
}
var arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 04];
console.log(shellSort(arr));
//VM1784:19 (10) [4, 13, 27, 38, 49, 49, 55, 65, 76, 97]
快速排序-氣泡排序的擴充套件
演算法思想:遞迴:
1.選取主元(通常以陣列的第一個值為標記
2.將陣列分為兩個集合
3.合併左右倆個集合並返回
4.重複1、2、3、直到最後陣列的長度小於2返回陣列—遞迴結束條件
應用:大規模資料處理,對於小規模資料(n<100)選擇使用簡單排序
function quickSort(arr) {
var len = arr.length,
arrLeft = [],
arrRight = [],
tag;
if (len < 2) return arr;//遞迴結束條件
tag = arr[0];//主元
for (var i = 1; i < len; i++) {
if (arr[i] < tag) {
arrLeft.push(arr[i]);
} else {
arrRight.push(arr[i]);
};
}
return quickSort(arrLeft).concat(tag, quickSort(arrRight));
}
var arr1 = [3, 5, 2, 2,4, 8, 6];
console.log(quickSort(arr1)); //[ 2, 3, 4, 5, 6, 8 ]