6.快速排序

//快速排序:选定一个数,将数组中比他大的放在左边,比他小的放在右边;
//        那么该趟排序中,就确定了选定数字的位置;我们在对左边和右边进行递归排序,最终所有位置都确定


function quickSort(arr){
    //用于交换的函数
    function swap(arr,idx1,idx2){
        let tmp=arr[idx1]
        arr[idx1]=arr[idx2]
        arr[idx2]=tmp
    }

    //用于排序的函数
    //数组 排序部分前置索引 排序部分后置索引
   function quick(arr,pre,last){
       //递归终止条件【数组长度小于等于1】
       if (last-pre<1){
           return
       }

       let base=arr[pre]//选取基准
       let i=pre;
       let j=last

       while (true){
           //寻找比基准小的位置
           for (i;i<=last;i++){
               if (arr[i]>base){
                   break
               }
           }
           //寻找比基准大的位置
           for (j;j>pre;j--){
               if (arr[j]<base){
                   break
               }
           }

           if (i<j){
               //如果i,j没有交叉则交换
               swap(arr,i,j)
           }else {
               //i,j交叉了说明只需要进行基数位置和最后一个比他小的位置【即当前j的位置】交换
               swap(arr,pre,j)
               break
           }
       }

       //前半部分递归排序
       quick(arr,pre,j-1)
       //后半部分递归排序
       quick(arr,j+1,last)
   }

   //调用排序函数
   quick(arr,0,arr.length)

}


//测试
let arr=[6,4,2,8,1,3,100,0]
quickSort(arr)
console.log(arr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值