js排序算法

1.冒泡排序

function bubbleSort(arr) {
	var len = arr.length;
	for(var i=0; i<len; i++) {
		for(var j=0; j<len-i; j++) {
			if(arr[j+1]<arr[j]){
				var temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	return arr;
}

每次比较把最大的放在最后面,每次少比较一个

2.插入排序

function insertSort(arr) {
	for(let i=1; i<arr.length; i++) {
		cur = arr[i];
		pre = i-1;
		while(pre>=0 && cur<arr[pre]){
			arr[pre+1] = arr[pre];
			pre--;
		}
		arr[pre+1] = cur;
	}
	return arr;
}

从下标1开始,和前面的比,比前面的小就放到前面。

3.希尔排序

function shellSort(arr) {
	var gap = parseInt(arr.length/2);
	while(gap>0){
		for(let i=gap; i<arr.length; i++) {
			cur = arr[i];
			pre = i-gap;
			while(pre>=0 && cur<arr[pre]){
			arr[pre+gap] = arr[pre];
			pre = pre - gap;
		}
		arr[pre+gap] = cur;
		}
	gap = parseInt(gap/2);
	}
	return arr;
}

将待排序的序列分成若干个子序列,将子序列进行插入排序,再对全体进行一次插入排序

4.快速排序

function quickSort(arr) {
	if (arr.length <= 1) { return arr; }
	var index = Math.floor(arr.length/2);
	var target = arr.splice(index, 1)[0];
	var left = [];
	var right =[];
	for (let i=0; i<arr.length; i++) {
		if(arr[i]<=target){
			left.push(arr[i]);
			}else{
			right.push(arr[i]);
			}
		}
	return [...quickSort(left), target ,...quickSort(right)];
	//return quickSort(left).concat([pivot],quickSort(right));
	}

5.选择排序

function selsetSort(arr){
	var index;
	for(let i=0; i<arr.length; i++) {
		index = i;
		for(let j=i+1; j<arr.length;j++) {
			if(arr[index]>arr[j]){ //找每一次遍历比i最小的
				index = j; //保存最小的索引
			}
		}
		if(index!=i){
			let temp = arr[i];
			arr[i] = arr[index];
			arr[index] = temp;
		}
	}
	return arr;
}

每次找到最小值,与第一个元素交换。

6.归并排序

function merge(left, right){
 	var re = [];
 	while(left.length>0&&right.length>0){
 		if(left[0]<right[0]) {
 			re.push(left.shift());
 		}else{
 			re.push(right.shift());
 		}
 	}
 	return re.concat(left).concat(right);
 }

 function mergeSort(arr){
 	if(arr.length==1) return arr;
 	var mid = Math.floor(arr.length/2);
 	var left = arr.slice(0,mid);
 	var right = arr.slice(mid);
 	return merge(mergeSort(left), mergeSort(right));
 }
 var arr = [48,1,5,9,6,3,8,7];
 var a = mergeSort(arr);
 console.log(a);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值