zoukankan      html  css  js  c++  java
  • javascript实现快速排序算法

    忘记了快速排序的思路是怎样的了,复习一下,写了两个实例,发表博文备忘。

    对于快速排序的思想,可以参考白话经典算法系列之六 快速排序 快速搞定,讲得比较通俗

    prototype扩展的方式

    /**
     * 对Array对象的原型扩展来实现快速排序
     * @param [left]  排序开始位置
     * @param [right]  排序结束位置
     * @returns {Array}
     */
    Array.prototype.quickSort = function(left, right){
        if(left === undefined)   left = 0;      //若left和right为空,设置初始值
        if(right === undefined)   right = this.length - 1;
        if(left < right){
            var ref = this[left];
            var low = left;
            var high = right;
            while(low < high){
                //从右往左查询比ref小的值
                while(low < high && this[high] > ref){
                    --high;
                }
                this[low] = this[high];
                //从左往右查询比ref大的值
                while(low < high && this[low] < ref){
                    ++low
                }
                this[high] = this[low];
            }
            this[low] = ref;
            this.quickSort(low+1, right);
            this.quickSort(left, low-1);
        }
        return this;
    };
    
    var arr1 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];
    console.log(arr1.quickSort());
    
    

    非prototype方式

    /**
     * @param array //要排序的数组
     * @returns {Array} //排完序的数组
     */
    var quicksort = function(array){
        if(!array.length)   return array;
        var low = 0;
        var high = array.length - 1;
        var ref = array[low];
        while(low < high){
            while(low < high && array[high] > ref){
                --high;
            }
            array[low] = array[high];
            while(low < high && array[low] < ref){
                ++low
            }
            array[high] = array[low];
        }
        array[low] = ref;
        return quicksort(array.slice(0,low)).concat([ref],quicksort(array.slice(low+1, array.length)));
    };
    
    var arr2 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];
    console.log(quicksort(arr2));
    
  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/wayns/p/4445274.html
Copyright © 2011-2022 走看看