js排序算法

方法1 冒泡排序

//相邻元素比较,大的往后放,排完1趟,最大的元素已经排好
var Arr = [7, 4, 9, 13, 2, 5, 3, 4]
function bubbleSort(arr) {
    var temp = null
	//一共需要n-1趟
	for (var pass = 1; pass <= arr.length - 1; pass++) {
		for (var i = 0; i < arr.length - pass; i++) {
			if (arr[i] > arr[i + 1]) {
				temp = arr[i]
				arr[i] = arr[i + 1]
				arr[i + 1] = temp
			}
		}
	}
	return arr
}
console.log(bubbleSort(Arr))

方法2 选择排序

//每趟找出最小的元素放到最前面 一共需要n-1趟
var Arr = [7, 4, 9, 13, 2, 5, 3, 4]
function selectionSort(arr) {
	var minIndex, temp
	for (var i = 0; i < arr.length - 1; i++) {
		minIndex = i;
		for (var j = i + 1; j < arr.length; j++) {
			if (arr[j] < arr[minIndex]) {
				minIndex = j;
			}
		}
		if (i !== minIndex) {
			temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp
		}
	}
	return arr;
}
console.log(selectionSort(Arr))

方法3 插入排序

//从arr[1]开始,与前面的元素比较,小的放前面,大的放后面
var Arr = [7, 4, 9, 13, 2, 5, 3, 4];
function insertionSort(arr) {
	for (var i = 1; i < arr.length; i++) {
		var item = arr[i];
		//存放待插元素
		var j = i - 1;
		//从待插元素前一个元素开始,向前遍历
		while (j >= 0 && arr[j] > item) {
			arr[j + 1] = arr[j];
			//如果大于待插元素,往后移
			j--;
		}
		arr[j + 1] = item;
	}
	return arr;
}
console.log(insertionSort(Arr));

方法4 希尔排序

var Arr = [7, 4, 9, 13, 2, 5, 3, 4];
function shellSort(arr) {
	var len = arr.length;
	var gap, i;
	for (gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
		for (i = gap; i < len; i++) {
			var temp = arr[i];
			var j = i - gap;
			while (j >= 0 && arr[j] > temp) {
				arr[j + gap] = arr[j];
				j = j - gap;
			}
			if (j != i - gap) {
				arr[j + gap] = temp;
			}
		}
	}
	return arr;
}
console.log(shellSort(Arr))

方法5 快速排序

var Arr = [7, 4, 9, 13, 2, 5, 3, 4];
function quickSort(arr) {
	if (arr.length <= 1) {
		return arr; //递归终止条件
	}
	var pointIndex = Math.floor(arr.length / 2); //基准点索引
	var point = arr.splice(pointIndex, 1)[0];   //splice返回删除的数组
	var left = [];
	var right = [];
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] <= point) {
			left.push(arr[i]);
		} else {
			right.push(arr[i]);
		}
	}
	return quickSort(left).concat([point], quickSort(right))
}
console.log(quickSort(Arr))

方法6 归并排序

var Arr = [7, 4, 9, 13, 2, 5, 3, 4];
function mergeSort(arr) {
	if (arr.length <= 1) {
		return arr;
	}
	var mid = Math.floor(arr.length / 2);
	var left = arr.slice(0, mid);  //slice返回所取数组的片段,splice返回的是删除的片段
	var right = arr.slice(mid);
	return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
	var re = [];
	while (left.length > 0 && right.length > 0) {
		if (left[0] <= right[0]) {
			re.push(left.shift()); //shift删除数组第一个元素,并返回
		} else {
			re.push(right.shift());
		}
	}
	return re.concat(left, right)
}
console.log(mergeSort(Arr))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值