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

    快速排序思想:

      找一个元素作为基准,然后对数组进行分区,使基准左边的数据比基准值小,基准右边的数据比基准值大,如此作为基准的元素调整到排序后的正确位置。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,使得数据正确排序。

     

    以前常用的方法:

    function quicksort(arr, low, high)
    {
        low = typeof low == 'number' ? low : 0;
        high = typeof high == 'number' ? high : arr.length-1;
    
        var left = low,
            right = high;
    
        if(low < high){
            var key = arr[left];
            while(left < right)
            {
                while(left < right && arr[right] >= key)
                {
                    right--;
                }
                arr[left] = arr[right];
                while(left < right && arr[left] <= key)
                {
                    left++;
                }
                arr[right] = arr[left];    
            }
            arr[left] = key;
            quicksort(arr, low, left-1);
            quicksort(arr, left+1, high);
        }
        return arr;
    }
    
    //var arr = quicksort([1,3,4,2]);

    看了阮一峰老师的博客后,发现用JS数组的特性来写特别方便,也容易理解:

    function quicksort(arr)
    {
        if (arr.length == 0)
            return [];
     
        var left = new Array();
        var right = new Array();
        var pivot = arr[0];
     
        for (var i = 1; 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 = quicksort([1,3,4,2]);

     上面两种都是为了将小的数据移到基准左侧,大的数据移到基准右侧,只是使用的方法不同。

     

  • 相关阅读:
    kubernetes架构部署
    GitLab+Jenkins+Ansible
    python之字典方法
    Python之列表方法
    python之字符串方法
    Python编写从ZabbixAPI获取信息
    Django基础
    扫描某个包下所有的类,输出所有使用了特定注解的类的注解值
    日志切面和统一异常处理
    Mybatis动态排序问题
  • 原文地址:https://www.cnblogs.com/zhenwen/p/5925241.html
Copyright © 2011-2022 走看看