#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;
}
代码修改如下:
#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跳出的话,会是死循环啊
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!