十大经典排序算法

//冒泡排序
function bubbleSort(arr)
{
	var length=arr.length;
	var temp;
	for(var i=0;i<length-1;i++)
	{
		for(var j=0;j<length-1-i;j++)
		{
			 if (arr[j] > arr[j+1]) {        // 相邻元素两两对比
                temp = arr[j+1];        // 元素交换
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
		}
	}
	return arr;
	
}
//选择排序
function selectSort(arr)
{
	var length=arr.length;
	var temp,maxIndex;
	for(var i=0;i<length-1;i++)
	{
		maxIndex=i;
		for(var j=i+1;j<length;j++)
		{
			if(arr[maxIndex]<arr[j])
				maxIndex=j
		}
		temp=arr[i];
		arr[i]=arr[maxIndex];
		arr[maxIndex]=temp;
	}
	return arr
	
}
//插入排序
function insertSort(arr) 
{
    var length=arr.length;
	var preIndex,currentItem;
	for(var i=0;i<length-1;i++)
	{
		preIndex=i;
		currentItem=arr[i+1];
		while(preIndex>-1&&arr[preIndex]>currentItem)
		{
			arr[preIndex+1]=arr[preIndex];
			preIndex--;
		}
		arr[preIndex+1]=currentItem;
	}
	return arr;
}
//希尔排序
function shellSort(arr)
{
	var length=arr.length;
	//将数组元素易gap为单位进行分组再快速排序
	//排序完之后将gap缩小为原来的一半,在排序,直到gap=1
	//gap=1之后排序就完成了
	for(var gap=Math.floor(length/2);gap>0;gap=Math.floor(gap/2))
	{
		//一共有length-gap个分组
		for(var i=gap;i<length;i++)
		{
			//对每个分组进行快速排序
			//每个分组元素间隔为gap
			//让当前元素等于第gap个元素
			//跟前面的插入排序是是反的
			var currentItem=arr[i];
			var preIndex=i;
			while(preIndex-gap>0&&arr[preIndex-gap]>currentItem)
			{
				arr[preIndex]=arr[preIndex-gap];
				preIndex-=gap;
			}
			arr[preIndex]=currentItem;
			
		}
	}
	return arr;
}
//归并排序
function mergeSort(arr)
{
	var length=arr.length;
	var left=[];
	var right=[];
	if(length<2)
		return arr;
	var middle=Math.floor(length/2);
	left=arr.slice(0,middle);
	right=arr.slice(middle);
	//注意有的时候数组的长度是奇数,右边的数组就会大一些
	//会导致下面的归并之后右边数组还有一个元素
	return merge(mergeSort(left),mergeSort(right));
}
function merge(left,right)
{
	var res=[];
	while(left.length&&right.length)
	{
		if(left[0]<right[0])
		{
			res.push(left.shift());
		}
		else
		{
			res.push(right.shift());
		}
	}
	//将所有元素返回,解决数组是奇数的问题
	return [...res,...left,...right]
}
//快速排序
var quickSort = function(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  var pivotIndex = Math.floor(arr.length / 2);
  //splice返回删除的元素
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};
//堆排序
//计数排序
//桶排序
//基数排序
var arr=[1,5,6,8,4,2,9,3,4];
var bubbleArr=bubbleSort(arr)
console.log(`bubbleSort\n`);
console.log(bubbleArr)
var selectSortedArr=selectSort(arr)
console.log(`selectSort\n`);
console.log(selectSortedArr)
var insertSorted=insertSort(arr);
console.log(`insertSort\n`);
console.log(insertSorted)
console.log(`shellSort\n`);
console.log(shellSort(arr));
console.log(`mergeSort\n`);
console.log(mergeSort(arr));
console.log(`quickSort\n`);
console.log(quickSort(arr));












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值