快速排序结果出错

发布于 2022-08-26 18:29:23 字数 1677 浏览 11 评论 0

正确的快排:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼前雾蒙蒙 2022-09-02 18:29:23
int i= begin+1;//这里
int j = end-1;

while( i < j )

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文