快速排序无法显示结果,请大家指导下问题在哪

#include<stdio.h>
int sort(int a[],int left,int right);//
void swamp(int a[],int left,int right);
int partition(int a[],int left,int right);
int main()
{
int i,a[10]={2,30,13,22,45,67,43,1,67,90};
sort(a,0,9);//传入参数
for( i=0; i < 10; i++ )
{
printf("%d", a[i]);
}
printf("\n\n");

}
int sort(int a[],int left,int right)
{
int key;
key=partition(a,left,right);
sort(a,left,key);
sort(a,key+1,right);
}
int partition(int a[],int left,int right)
{
int p;
p=a[left];
while(left<right)
{
while(a[right]>p){
right--;
}
swamp(a,left,right);
while(a[left]<=p)
{
left++;
}
swamp(a,left,right);
}
return left;
}
void swamp(int a[],int left,int right)
{
int k;
k=a[left];
a[left]=a[right];
a[right]=k;
}

img

代码修改如下:

#include<stdio.h>
int sort(int a[],int left,int right);//
void swamp(int a[],int left,int right);
int partition(int a[],int left,int right);
int main()
{
    int i,a[10]={2,30,13,22,45,67,43,1,67,90};
    sort(a,0,9);//传入参数
    for( i=0; i < 10; i++ )
    {
        printf("%d ", a[i]);
    }
    printf("\n\n");
    return 0;
}
int sort(int a[],int left,int right)
{
    int key;
    key=partition(a,left,right);
    if(left < key)
        sort(a,left,key-1); //注意这里是key-1
    if(key < right)
        sort(a,key+1,right);
    return 0;
}
int partition(int a[],int left,int right)
{
    int p;
    p=a[left];
    while(left<right)
    {
        while(left<right && a[right]>p){
            right--;
        }
        if(left<right)
        {
            swamp(a,left,right);
            left++;
        }
        
        while(left<right && a[left]<=p)
        {
            left++;
        }
        if(left<right)
        {
            swamp(a,left,right);
            right--;
        }
        
    }
    a[left] = p;
    return left;
}
void swamp(int a[],int left,int right)
{
    int k;
    k=a[left];
    a[left]=a[right];
    a[right]=k;
}

你这个sort递归函数中间没有return跳出的话,会是死循环啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632