存档以便查阅,算法思路:假设是按照从小到大排序,先找到一个基准,(然后从左向右遍历,直到遇到比基准数值大的数停下(注意边界)位置记为i,接着从右往左遍历,直到遇到比基准数值小且位置>i,位置记为j,然后对i,j位置进行交换),重复括号内过程,直到i>j结束。然后将数组分为两部分,重复上述过程。
#include <stdio.h>
#include<math.h>
#include<string.h>
int Partition(int a[], int p, int r){
int i=p+1, j=r;
int x=a[p];
int t;
while(1){
while(a[i]<x&&i<r)
i++;
while(a[j]>x&&j>p)
j--;
if(i>=j)break;
t=a[i];
a[i]=a[j];
a[j]=t;
}
a[p]=a[j];
a[j]=x;
return j;
}
void QuickSort(int a[], int p, int r){
if(p<r){
int q=Partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int main()
{
int array[]={29,2,45,3,8,14,36,27,67,41,52};
int len=11;
QuickSort(array,0,len-1);
for(int i=0;i<len;i++)
{
printf("%d",array[i]);
printf("%c",(i==len-1)?'\n':',');
}
return 0;
}
//24,33,29,8,15,-92,41,65,18,-7,73