分析:快排是比较经典的排序算法,算法思路是每一趟排序根据一个数组中的参考值划分成比参考值大的和比参考值小的两部分数组,,再分别对这两个数组划分,直到有序。每次划分能确定参考值的位置。算法最小时间复杂度O(nlog(n)),当数组原来就有序的时候退化成O(n*n)
代码:
#include<stdio.h>
//递归算法
int partion(int *a,int low,int high)
{
int mid=a[low];
while(low<high)
{
while(low<high && a[high]>mid) high--;
a[low]=a[high];
while(low<high && a[low]<mid) low++;
a[high]=a[low];
}
a[low]=mid;
return low;
}
void quicksort(int *a,int low,int high)
{
if(low>=high) return;
int mid=partion(a,low,high);
quicksort(a,low,mid-1);
quicksort(a,mid+1,high);
}
//非递归算法 使用栈,保存划分后的low high下标
main()
{
int a[]={3,19,5,7,28,9};
int i=0;
quicksort(a,0,5);
for(i=0;i<=5;i++)
printf("%d ",a[i]);
system("pause");
}