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));
    
  • 相关阅读:
    简单好用的日历排期控件
    Ext.js create store
    Ext.js页面添加元素
    Ext.js Tree
    前端设计的七大法则
    如何写软件开发相关文档,它包含哪些种类和内容
    行内文字末尾下降
    正则表达式
    滚动加载数据
    location.hash来保持页面状态
  • 原文地址:https://www.cnblogs.com/wayns/p/4445274.html
Copyright © 2011-2022 走看看