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

八大排序算法-复杂算法(希尔排序、快速排序、归并排序)

希尔排序-插入排序的扩展

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 ]

堆排序

猜你喜欢

转载自blog.csdn.net/qq_40151857/article/details/82831392