快速排序:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别再进行上述的分割,每次分成两部分的排序过程可以递归进行,以此达到整个数据变成有序序列。
代码
#include <stdio.h>
int sort(int *array,int left,int right)
{
int tmp=array[left];
while(left<right)
{
while(array[right]>tmp && left<right)
{
right--;
}
if(left<right)
{
array[left]=array[right];
left++;
}
while(array[left]<tmp && left<right)
{
left++;
}
if(left<right)
{
array[right]=array[left];
right--;
}
}
array[left]=tmp;
return left;
}
void quick_sort(int * array,int left,int right)
{
if(left<right)
{
int mid=sort(array,left,right);
quick_sort(array,left,mid-1);
quick_sort(array,mid+1,right);
}
}
int main(void)
{
int array[]={12,7,45,24,15,72,56,21,5};
int len=sizeof(array)/4; //计算元素个数
int left=0;
int right=len-1; //最后一个元素的下标
quick_sort(array,left,right);
int i;
for(i=0;i<len;i++)
{
printf("%d\t",array[i]);
}
printf("\n");
}