思路:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
#include <stdio.h>
int division(int a[] ,int left,int right);
void quickSort(int a[],int left,int right);
int main()
{
int a[10]={25,34,24,65,56,78,72,96,87,15};
quickSort(a,0,9);
//打印数组
for(int p=0;p<10;p++)
printf("%d ",a[p]);
return 0;
}
int division(int a[] ,int left,int right) //分割函数
{
int basic=a[left];//基准数字
while(left<right)
{
while(left<right && a[right]>basic) //右边的数字大于基准数字
--right; //大于则继续自右向左比较
a[left] = a[right]; //右边的小于基准数字则停止,并将小于的值赋予左边
while(left<right && a[left]<basic) //right不成立时,再从左边比较
++left; //小于则,继续查找
a[right]=a[left]; //大于时,将左值赋给right
}
a[left]=basic;
return left;
}
void quickSort(int a[],int left,int right)
{
int i,j;
if(left<right)
{
i=division(a,left,right);
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
}