稳定的快排

Posted mximo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稳定的快排相关的知识,希望对你有一定的参考价值。

int stable_partition(vector<int>& a, int s, int e) {
    if (s >= e) return s;
    vector<int> b(a.size());
    int pa1, pa2, pb1, pb2;
    pa1 = pb1 = s; pa2 = pb2 = e;
    int start = s, end = e;
    int key = a[s];
    while (pa1 < pa2) {
        while (pa1 < pa2 && a[pa1] < key)
        {
             a[s++]= a[pa1++];
        }

        while (pa1 < pa2 && a[pa2] >= key) {
             a[e--]= a[pa2--] ;
        }
        if (pa1 < pa2) {
            b[pb1++]= a[pa1++];
            b[pb2--]= a[pa2--] ;
        }
    }
    int i;
    for (i = pb2 + 1; i <= end; i++)
        a[s++] = b[i];
    int idx = pa1;
    for (i = start; i < pb1; i++)
        a[s++] = b[i];

    return idx;
}

 

以上是关于稳定的快排的主要内容,如果未能解决你的问题,请参考以下文章

最优美的快排代码

Python的快排应有的样子

返回值为int[] 的快排写法

易错的快排---qsort()

排序(重点介绍快速排序的各种场景, 堆排序的数组空洞)

排序(重点介绍快速排序的各种场景, 堆排序的数组空洞)