说是两种方法,其实都是递归。只不过有一点不一样
①:
int Getpos(int a[],int first,int end)
{
int i = first;
int j = end;
while(i < j)
{
while(i < j && a[i] <= a[j])
{
j--;
}
if(i < j)
{
swap(a[i],a[j]);
i++;
}
while(i < j && a[i] <= a[j])
{
i++;
}
if(i < j)
{
swap(a[i],a[j]);
j--;
}
}
return i;
}
void Quicksort(int a[],int first,int end)
{
if(first >= end)//说明这个数组只有0/1个值,不必排序
{
return ;
}
if(first < end)
{
int pos=Getpos(a,first,end);
Quicksort(a,first,pos-1);
Quicksort(a,pos+1,end);
}
}
②:
void Quicksort(int a[], int first,int j)
{
if(first >= end)//说明这个数组只有0/1个值,不必排序
{
return ;
}
int i=first--1;
int j=end+1;
int x=a[first+end>>1];//取数组中间值作为pos
while(i= x);
if(i < j)
{
swap(a[i],a[j]);
}
Quicksort(a,first,j);
Quicksort(a,j+1,end);
}
}
主函数:
#includeint main() { int i=0; int a[100]={ 0 }; for(i = 0;i < 100;i++) { scanf("%d",a+i); } Quicksort(a,0,100-1); return 0; }



