请问这种递归形式的快速排序的递归出口是哪一个语句?

void QuickSort(int *p, int low, int high)
{
    if (low< high)
    {
        int i = low, j = high, pivot = p[low];
        while (i < j)
        {
            while (i < j && p[j] >= pivot) // 从右向左找第一个小于pivot的数 
                j--;//退出while时会产生一个j,使得p[j]<pivot;
            if (i < j)//如果这个j比i大
                p[i++] = p[j];//令p[i]=p[j],然后递增i;这么写比{p[i]=p[j];i++}更简洁!!

            while (i < j && p[i]< pivot) // 从左向右找第一个大于等于pivot的数 
                i++;
            if (i < j)
                p[j--] = p[i];///令p[j]=p[i],然后递减j


        }
        p[i] = pivot;//pivot就位
                     // 递归调用
        QuickSort(p, 0, i - 1);  //继续快排左区间
        QuickSort(p, i + 1, high);//排列右区间,之前利用了j,使得不用每次都更新右区间的右端点
    }
    
}


#C/C++#
全部评论
low == high
点赞 回复 分享
发布于 2018-05-07 19:22
请问是 p[i] = pivot;//pivot就位 这一句吗?
点赞 回复 分享
发布于 2018-05-07 18:57
第一个if语句啊
点赞 回复 分享
发布于 2018-05-08 01:49
....弄三个元素带入一下程序不就看明白了么,  递归基就是第一句的条件,建议你改一下一个这个尾递归变成迭代的形式,会明白的更多
点赞 回复 分享
发布于 2018-05-08 02:48

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务