快速排序结果出错
正确的快排:
void quick_sort( vector<int>& numbers, int begin, int end )
{
if( begin >= end-1 )
return;
int k = partition( numbers, index, begin, end);
quick_sort( numbers, index, begin, k);
quick_sort( numbers, index, k+1, end );
}
int partition(vector<int>& numbers, int begin, int end)
{
int pivot = numbers[begin];
int i = begin;
int j = end;
while( i < j ){
while( numbers[++i] < pivot && i < end );
while( numbers[--j] > pivot && j > begin );
if( i < j ){
int tmp = numbers[i ];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
}
numbers[begin] = numbers[j];
numbers[j] = pivot;
return j;
}
我自己写的partition函数有一点不同,就是i,j的初始值不同,内层的while循环也有相应的改变,我觉得没有什么不同,但是使用我的partition函数排序结果就是错误的,求教这是怎么回事?
下面是我的partition函数
int partition(vector<int>& numbers, vector<int>& index, int begin, int end)
{
int pivot = numbers[begin];
int i= begin+1;//这里
int j = end-1;
while( i < j ){
while( numbers[i] < pivot && i <= end-1){
++i;
}
while( numbers[j] > pivot && j > begin ){
--j;
}
if( i < j ){
int tmp = numbers[i ];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
}
numbers[begin] = numbers[j];
numbers[j] = pivot;
return j;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你这里循环的次数就变了啊