zoukankan      html  css  js  c++  java
  • 快排 快速排序

    //入门:
    function quickSort(arr){
    
        if(arr.length<=1){return arr;}
        var pivotIndex=Math.floor(arr.length/2);
        var pivot=arr.splice(pivotIndex,1)[0];
        //定义
        var left=[];
        var right=[];
        //小的放left,大的放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)); 
       //大到小  
       //return quickSort(right).concat([pivot],quickSort(left)); 
    }
    //进阶
    const quickSort = (array) => { const sort = (arr, left = 0, right = arr.length - 1) => { if (left >= right) {//如果左边的索引大于等于右边的索引说明整理完毕 return } let i = left let j = right const baseVal = arr[j] // 取无序数组最后一个数为基准值 let a = [50,3,8,22,9,656,12,35,699,666,1111,35,100] i=0 j=12; i=1 j=12; i=2 j=12; i=3 j=12; i=4 j=12; i=5 j=12; a = [50,3,8,22,9,656,12,35,699,666,1111,35,656] baseVal =100; i=5 j=12 i=5 j=11 a = [50,3,8,22,9,35,12,35,699,666,1111,35,656] i=8 j=11 a = [50,3,8,22,9,35,12,35,699,666,1111,699,656] i=8 j=10 i=8 j=8 a = [50,3,8,22,9,35,12,35,100,666,1111,699,656] while (i < j) {//把所有比基准值小的数放在左边 比基准值大的数放在右边 while (i < j && arr[i] <= baseVal) { //找到一个比基准值大的数交换 i++ } // arr[i] > baseVal 或 i == j; 将较大的值放在右边如果没有比基准值大的数就是将自己赋值给自己(i 等于 j) arr[j] = arr[i] while (j > i && arr[j] >= baseVal) { //找到一个比基准值小的数交换 j-- } // arr[k] < baseVal 或 i == j; 将较小的值放在左边如果没有找到比基准值小的数就是将自己赋值给自己(i 等于 j) arr[i] = arr[j] } // i==j arr[j] = baseVal // 将基准值放至中央位置完成一次循环(这时候 j 等于 i ) // 0 7 sort(arr, left, j-1) // 将左边的无序数组重复上面的操作 // 9 12 sort(arr, j+1, right) // 将右边的无序数组重复上面的操作 } const newArr = array.concat() // 为了保证这个函数是纯函数拷贝一次数组 sort(newArr)

    快排 快速排序

  • 相关阅读:
    【转】Senior Data Structure · 浅谈线段树(Segment Tree)
    1260:【例9.4】拦截导弹(Noip1999)
    1255:迷宫问题
    1253:抓住那头牛
    1254:走出迷宫
    POJ 3692 幼儿园做游戏 最大团 模板题
    POJ 1466 大学谈恋爱 二分匹配变形 最大独立集
    POJ 3422 矩阵取数 最小费用流拆点+负边
    POJ 2195 一人一房 最小费用流 建图 水题
    POJ 3068 运送危险化学品 最小费用流 模板题
  • 原文地址:https://www.cnblogs.com/tongbiao/p/10409909.html
Copyright © 2011-2022 走看看