js版排序

冒泡
时间复杂度:o(n2)最好时为(o(n))稳定

function sort(arr){
	for (var i=0;i<arr.length-1;i++) {
		var flag=true;
		for (var j=i;j<arr.length-i-1;j++) {
			if (arr[j]>arr[j+1]) {
				var temp =arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
				flag=false;
			}
			if (flag) {
				break
			}
		}
	}
	return arr;
}

归并排序:
时间复杂度o(nlogn),空间o(n)

function merSort(arr){
	if (arr.length<=1) {
		return arr;
	}
	var left=arr.slice(0,Math.floor(arr.length/2));
	var right=arr.slice(Math.floor(arr.length/2));
	return mer(merSort(left),merSort(right));
}
function mer(left,right){
	var result=[];
	while (left.length&&right.length){
		if (left[0]>right[0]) {
			result.push(right.shift())
		}else{
			result.push(left.shift())
		}
	}
	while (left.length){
		result.push(left.shift())
	}
	while (right.length){
		result.push(right.shift())
	}
	return result;
}

选择排序
和冒泡一样 序列5 8 5 2 9,第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

function sort(arr){
	for (var i=0;i<arr.length;i++) {
		var min=i;
		for (var j=i+1;j<arr.length;j++) {
			if (arr[min]>arr[j]) {
				min=j;
			}
		}
		var temp=arr[i];
		arr[i]=arr[min];
		arr[min]=temp;
	}
	return arr;
}

插入排序
o(n2)最好o(n1)稳定

function sort(array) { 
	for(var i = 1; i < array.length; i++) {
       var key=array[i];
       j=i-1;
       while (array[j]>key){
       	    array[j+1]=array[j];
         	j--;
       	
       }
       array[j+1]=key;
       
       
	}  
	return array;
}

快排
最差o(n2)其他都是o(nlogn)不稳定

function sort(array) { 
	if (array.length<=1) {
		return array;
	}
	var left=[];
	var right=[];
	var center=Math.floor(array.length/2);
     var centerVal=array.splice(center,1)
	for (var i=0;i<array.length;i++) {
		if (array[i]<centerVal) {
			left.push(array[i])
		}else{
			right.push(array[i])
		}
	}
	return sort(left).concat(centerVal,sort(right))
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值