美文网首页
快速排序

快速排序

作者: 你期待的花开 | 来源:发表于2017-02-10 23:45 被阅读15次

    快速排序算法,采用分治的思想,整个排序过程递归进行,实质就是选定一个数作为关键字,筛选出比此值小的数和比此值大的数这两部分数分别放在左右两边,将此值放在中间,然后对那两部分分别做此操作,直到各部分只有一个数。时间复杂度最差为O(n^2),平均时间复杂度为O(nlogn)。

    var data = [6, 7, 3, 5, 4, 9, 10, 2, 8, 1];
    function sort1(data, l, r) {
        var f = data[l];//用f记住第一个数
        var i = l;
        var j = r;//左右两边分别设置两个指针
        while (i < j) {
            while (i < j && data[j] > f) {
               j--;
            } //如果右面的指针比关键字大,指针左移,否则指针停止移动,此时指针所指数值比关键字小
            if (i < j) {
                data[i] = data[j];//将上面筛选出的比关键字小的数放到前面
                i++;//指针右移
            }
            while (i < j && data[i] <= f) {
                i++;
            } //如果左面的指针比关键字小,指针右移,否则指针停止移动,此时指针所指数值比关键字大
            if (i < j) {
                data[j] = data[i]; //将上面筛选出的比关键字大的数放到后面
                j--; //指针左移
            }
        }
        data[i] = f;//关键字放在正确位置
        return i;
    }
    function quicksort(data, l, r) {
        if (l > r)
            return;
        var temp
        temp = sort1(data, l, r);
        quicksort(data, l, temp - 1);
        quicksort(data, temp + 1, r);
        return data;
    }
    quicksort(data, 0, 9);
    console.log(data);
    
    排序结果

    当一个数组中相同的数的个数较多时,可以对此进行改进,将相同的数放在一起,对其余不同的数的部分进行排序,三路进行,这样则可以精简排序的过程。
    此算法适合于对无序的数组排序,当数组近似有序时,此算法性能较差。

    相关文章

      网友评论

          本文标题:快速排序

          本文链接:https://www.haomeiwen.com/subject/xgpnittx.html