基本的三种排序方法

 三种排序方法

1.冒泡排序

//冒泡排序 由小到大
    //如果前边比后面的大,交换两个元素的位置  每比较一轮,出一个大数

    var arr=[8,5,1,2];
    //第一轮 8 5 比较---5 8-[5,8,1,2] 8 1--[5,1,8,2] 8 2--[5,1,2,8] 3次 推出最大数
    //第二轮 5 1 ---[1,5,2,8] 5 2---[1,2,5,8]  2次 推出最大的2位
    //第三轮 1  2---[1,2,5,8] 1次
    //arr.length-1
     //轮数
    for(i=0;i<arr.length-1;i++){
      //次数
      for(var j=0;j<arr.length-1-i;j++){
            //交换位置
        if(arr[j]>arr[j+1]){
            //交换两个数的位置,不能直接交换,要有第三个变量
        //     let temp=arr[j];//先用temp存储arr[j]
        //     arr[j]=arr[j+1];
        //     arr[j+1]=temp;
        [arr[j],arr[j+1]]=[arr[j+1],arr[j]];
         }
      }
    }
    console.log(arr);

插入排序

  //插入排序
        var arr=[34,56,12,66,12];
        function insertSort(arr){
            //1.创建一个新数组,将老数组的第一位放在新数组里
           // var newArr=[arr[0]];
           var newArr=[];
           newArr.push(arr[0]);
            console.log(newArr);
            //循环老数组,从索引i=1开始,获取每一项
            for(i=1;i<arr.length;i++){
                var item=arr[i];
                //新数组从右向左倒序比较
                for(var j=newArr.length-1;j>=0;j--){
                    var newitem=newArr[j];
                    //如果老数组哪项大于等于新数组的哪一项,就插到新数组的哪项后边
                    if(item>=newitem){
                        //默认splice(i,0,xx)插入那项前边
                        newArr.splice(j+1,0,item);
                        break;//插入完数据后,内层循环已经结束
                    }
                    //比较一圈,新数组的哪项内容都比老数组的哪项大,插到最前边
                    //arr.lrngth-1---->0
                    if(j==0){
                        newArr.unshift(item);
                    }
                }

            }

            return newArr;
        }
        var newArr=insertSort(arr);
        console.log(newArr);

3.快速排序

 /*快速排序
var ary=[12,15,14,13,16,11];
 原理:先拿出中间项,然后把此项从数组中删除掉,让数组中的剩余项一一跟这个中间项做比较,新建两个左右数组,如果大的项就放到右盒子,如果小的项就放到左盒子
 [左盒子小]--中间项--[右盒子大]
 依次再继续重复相同的步骤,把左盒子和右盒子都进行排序,直到出现空数组或者一项的时候停止
*/
function quickSort(ary){
    if(ary.length<=1){
        return ary;
    }
   var centerIndex=Math.floor(ary.length/2);
   // 拿到中间项的同时,把中间项从数组中删除掉
   var centerValue=ary.splice(centerIndex,1)[0];
   // 新建两个数组:leftAry,rightAry;把ary中剩余的项,给中间项做对比,如果大项就放到右数组,小项就放到左数组.
   var leftAry=[],rightAry=[];
   for(var i=0;i<ary.length;i++){
        if(ary[i]<centerValue){
            leftAry.push(ary[i]);
        }else{
            rightAry.push(ary[i]);
        }
    }
    return quickSort(leftAry).concat(centerValue,quickSort(rightAry));
}
var ary=[12,15,14,13,16,11];
var res=quickSort(ary);
console.log(res);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值