zoukankan      html  css  js  c++  java
  • js 的各种排序算法 -- 待续

    链接

    function quickSort(arr,l,r){
        if(l < r){
            var i = l, j = r, x = arr[i];
            while(i<j){
                while(i<j && arr[j]>x)
                    j--;
                
                if(i<j)
                    //这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
                    arr[i++] = arr[j];
                
                while(i<j && arr[i]<x)
                    i++;
                
                if(i<j)
                    //这里用j--,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
                    arr[j--] = arr[i];
            }
            arr[i] = x;
            
            quickSort(arr, l, i-1);
            quickSort(arr, i+1, r);
        }
    }
    <script>
    
    
           function quickSort(arr,l,r){
                //总体思路是, 选第一个 a 作为参考
                // 从最后一个往前逐个对比, 如果遇到比a小, 就把这个 c 放在第一位
    
                // 还是 a 作为参考, 
                // 从第二个往后逐个对比, 如果遇到比 a 大, 就把这个 d 放在 c 开始的位置
    
                // 最后 a 就放在 d的位置, 
                // 这样 a 左边的都比 a小, 
                //  a右边的都比 a大
    
                if(l < r){
                    var i = l, j = r, left = arr[i];  //left 3  抽取出第一位的值
    
    
                    // [3,2,6,1, 9,8,6 ]
    
                    while(i<j){
    
                        // 同时满足 
                        // 对比的坐标在 第一个3的 后面
                        // 对比的值 大于 3
                        // 则排除掉
                        while(i<j  &&  arr[j]> left)  //arr[j]  6
                            
                            j--;      // j 6
    
                            // 最后 j 为3,  arr[j] 为 1
                        
                            // i 没有变,  j在变
    
    
                        if(i<j)
                             // 填充第一位的值,  3 变成 1,  同时 i 从0 变成 1
                            arr[i++] = arr[j];
                        
    
    
    
    
                            // [1, 2, 6, 1, 9, 8, 6]
    
                        //    1 < 3    &&  2      <  3    
                        while(i < j    &&  arr[i] < left )
                       
                            i++;
    
                        // 最后 i 为 2
                        // i 在改变,  j没有变化
                       
                        // 2<3
                        if(i<j)
                            
                            // 3 的位置被填充, 变成6, 同时j 变成了 2 
                            arr[j--] = arr[i];
    
                            // [1, 2, 6, 6, 9 , 8 ,6 ]
    
    
                    }
    
    
    
    
                    //确定中间的值 [1, 2, 3, 6, 9 , 8 ,6 ]
                    arr[i] = left;
                    console.log(arr)
    
                    // 排序左边的数组
                    quickSort(arr, l, i-1);
    
    
                    //排序右边的数组
                    quickSort(arr, i+1, r);
    
                }
            }
    
    
     
            var arr = [8,5,1,4,6, 9 ,3,8,7, 6, 2 ]
    
            quickSort(arr, 0, arr.length-1)
    
            console.log(arr)
        </script>
    

      

  • 相关阅读:
    基于visual Studio2013解决C语言竞赛题之1074八皇后
    Bit,Bytes,KB,MB,GB,TB,PB,EB,ZB,YB
    RFID系统的选择
    java中复制文本文件
    java中复制文本文件
    数据筛选和排序
    实现Windows程序的数据绑定
    实现Windows程序的数据更新
    使用ListView控件展示数据
    构建良好的windows程序
  • 原文地址:https://www.cnblogs.com/dhsz/p/6483936.html
Copyright © 2011-2022 走看看