关于快速排序的细节问题
下面的代码里我删去if(left>right)return;或者&&i<j,temp&&i<j程序就无法运行,这里的quicksort是定义为void型为什么出现return语句。还有我以为left>right以及i>j的情况是不会出现的,为什么要加上&&i<j??
#include<stdio.h>
int a[101],n;//由于在子函数中运用,所以定义为全局变量
void quicksort(int left ,int right)
{
int temp,i,j;
int t;
if(left>right)
return;
i=left;
j=right;
temp=a[left];//temp用来保存基准数
while(i!=j)//将大于temp的数与小于temp的数交换位置
{
while(a[j]>=temp&&i<j)//
j--;
while(a[i]<=temp&&i<j)
i++;
if(i<j){t=a[j];a[j]=a[i];a[i]=t;}
}
a[left]=a[i];a[i]=temp; //当i,j相等时将基数与最左边的数交换
quicksort(left,i-1); //递归调用
quicksort(i+1,right);
}
int main(void)//从小到大排序
{
int i;
printf("请输入数的个数:");
scanf("%d",&n);printf("\n");
printf("请输入数据:");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}