首页 > 其他 > 详细

稳定的快排

时间:2017-07-27 23:25:30      阅读:408      评论:0      收藏:0      [点我收藏+]
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;
}

 

稳定的快排

原文:http://www.cnblogs.com/dynas/p/7247772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!