稳定的快排


    if (s >= e) return s;
    int b[7];
    int pa1, pa2, pb1, pb2;
    pa1 = pb1 = s; pa2 = pb2 = e;
    int start = s, end = e;
    int key = a[s];
    for (int i = s + 1; i <= e;i++)
    if (a[i] >= key)b[pb1++] = a[i];

    for (int i = e; i > s; i--)
    if (a[i] < key)b[pb2--] = a[i];

    for (int i = pb2 + 1; i <= e; i++)
        a[start++] = b[i];
    int idx = start ;
    a[start++] = key;
    for (int i = s; i < pb1; i++)
        a[start++] = b[i];

    return idx;

要实现稳定的快排必须使用额外的空间,每次扫两次数组,把大于key和小于key的放在额外数组两侧,然后拷贝到原数组中。

 

 

posted @ 2017-07-27 22:35  mximo  阅读(1563)  评论(0编辑  收藏  举报