我正在尝试使用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;必须在它的最后。 我对分区功能的理解是否存在缺陷,或者我的实现存在问题?