#include<stdio.h>
int qusort(int a[],int start,int end)
{
int i,j,temp;
temp=a[start];
i=start;
j=end;
while(i<j)
{
while(i<j&&a[j]>=temp)
{
j--;
if(a[j]<temp)
a[j]=a[i];
}
while(i<j&&a[i]<temp)
{
i++;
if(a[i]>temp)
a[i]=a[j];
}
}
a[i]=temp;
if(start<i)
qusort(a,start,j-1);
if(end>=i)
qusort(a,j+1,end);
return 0;
}
int main()
{
int a[10];
for(int i=1;i<=10;i++)
{
scanf("%d",&a[i]);
}
qusort(a,1,10);
for( int i=1;i<=10;i++)
printf("%d ",a[i]);
return 0;
}
后两条错误是什么意思,我经常遇到
数组下标从0开始
使用vs推荐更为安全的输入函数:scanf_s("%d", &a[i], 10);
1、数组下标是从0开始的
2、qusort里面有问题,可能会死循环,比如输入的第一个值大于最后一个值,就会死循环,因为while(i<j)里面的两个while都不满足,i和j都不会变。
#include<stdio.h>
int qusort(int a[],int start,int end)
{
int i,j,temp;
temp=a[start];
i=start;
j=end;
while(i<j)
{
while(i<j&&a[j]>=temp)
{
j--;
}
if(i<j){
a[i]=a[j];
}
while(i<j&&a[i]<temp)
{
i++;
}
if(i<j){
a[j]=a[i];
}
}
a[i]=temp;
if(start<i)
qusort(a,start,i-1);
if(end>=i)
qusort(a,i+1,end);
return 0;
}
int main()
{
int a[10];
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
qusort(a,0,9);
for( int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}