快排其实已经接触了好一段时间了,但是一直没有搞懂其思想,最近几天写了几次快排,懂了一些,所以写一篇blog记录下,之后理解更深了就再写一篇吧。
快排,顾名思义就是一种效率较高的排序算法。它的精妙之处便是用了一种“分而治之”的思想,将一个大规模的
排序任务一分再分。先从数列中取出一个数作为基准数。将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步
#include<stdio.h>
void sort(int a[],int left,int right);
#define N 10
int main()
{
int a[N]={9,1,5,7,4,5,0,7,8,9};
sort(a,0,9);
for(int i=0;i<N;i++)
printf("%d ",a[i]);
}
void sort(int a[],int left,int right)
{
int i,j,temp,standerd;
if(left>right)
return ;
else
i=left; j=right; standerd=a[left];
while(i!=j)
{
while(i < j && a[j] >= standerd)
j--;
if(i < j)
{
a[i] = a[j];
i++;
}
while(i < j && a[i] <= standerd)
i++;
if(i < j)
{
a[j] = a[i];
j--;
}
}
/***基准数归位***/
a[i]=standerd;
/***递归调用***/
sort(a,left,i-1);
sort(a,i+1,right);
}