美文网首页
一个神奇的快速排序算法

一个神奇的快速排序算法

作者: 修司敦 | 来源:发表于2018-11-13 11:47 被阅读0次

这个算法没有 swap 过程,直接把个别元素复制到了另一个位置,但是到最后依旧可以排序,而且没有丢失任何一个元素。我花了一上午模拟过程才明白了这个算法:

void QuickSort(vector<int>& v, int low, int high) {
    if (low >= high)        // 结束标志
        return;
    int first = low;        // 低位下标
    int last = high;        // 高位下标
    int key = v[first];     // 设第一个为基准

    while (first < last)
    {
        // 将比第一个小的移到前面
        while (first < last && v[last] >= key)
            --last;
        if (first < last)
            v[first++] = v[last]; //这里是替换而不是交换

        // 将比第一个大的移到后面
        while (first < last && v[first] <= key)
            ++first;
        if (first < last)
            v[last--] = v[first]; //这里是替换而不是交换
    }
    // 基准置位
    v[first] = key; //但是到这里的时候,数组里的元素只是换了位置,而没有丢失掉任何一个
    // 前半递归
    QuickSort(v, low, first - 1);
    // 后半递归
    QuickSort(v, first + 1, high);
}

相关文章

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 手撕代码 之 快速排序

    1.实现快速排序算法 问题描述给定一个无序数组int[ ] a,使用快速排序算法进行排序。 解题思路对于快速排序,...

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 算法

    排序算法有哪些? 最快的排序算法是哪个? 手写一个冒泡排序 手写快速排序代码 快速排序的过程、时间复杂度、空间复杂...

  • 11、【排序】快速排序(1)

    1、概述 快速排序(Quick Sort)是一种高级排序算法。 快速排序算法相对来说比较复杂,因为快速排序算法所延...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 快速排序算法

    快速排序算法是不稳定的排序算法。 快速排序算法是基于分治策略的一个算法。其基本思想是,对于输入的子数组 a[p:r...

  • 排序算法之快速排序

    排序算法之快速排序 参考自算法(第四版),快速排序 算法思想 对数组中取一个切分元素,下文简称pivot 然后使得...

  • 算法

    排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速排序代码快速排序的过程、时间复杂度、空间复杂度手写堆...

  • 算法-排序-快速排序优化

    算法-排序-快速排序优化

网友评论

      本文标题:一个神奇的快速排序算法

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