1. 程式人生 > >八大排序演算法(希爾排序、快速排序、堆排序)

八大排序演算法(希爾排序、快速排序、堆排序)

希爾排序-插入排序的擴充套件

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 ]

堆排序