快速排序中的分区功能无法正常工作

时间:2017-08-10 21:22:11

标签: sorting computer-science quicksort

我正在尝试使用quicksort的分区功能将数组分成2个部分,比所需的元素(pivot)少一个,而其他部分大于所需的元素(pivot)。

分区功能

void partition(int a[],int beg,int end,int pivotindex){
    swap(a[pivotindex],a[end]);
    int x=a[end];
    int i=beg-1;

    for(int j=beg;j<=end-1;j++){
        if(a[j]<=x){
           i++;
           swap(a[i],a[j]);
        }
    }

    swap(a[i+1],a[end]);
    return ;
}

输入

0 1 2 0 2 1 1 //array elements
2 //pivot index

输出

0 1 1 0 2 1 2

在干运行代码时,输​​出是正确的,但由于教科书已经指定了分区功能的作用,我期待这个输出

0 1 1 0 1 2 2

或其他一些组合,但两者都是&#34; 2 s&#34;必须在它的最后。 我对分区功能的理解是否存在缺陷,或者我的实现存在问题?

0 个答案:

没有答案