快速排序结果出错

正确的快排:

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;
}
阅读 3.9k
1 个回答
int i= begin+1;//这里
int j = end-1;

while( i < j )

你这里循环的次数就变了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题