ACM第一站————快速排序

时间:2023-03-09 17:37:15
ACM第一站————快速排序
转载请注明出处,谢谢!http://www.cnblogs.com/Asimple/p/5455125.html
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
故此,在快排中,如何选好基准是一件很重要的事。我习惯将第一个数做为基准。事实上,最优的情况,是将第一个,最后一个,以及中间的一个数相比较,选出最小(最大)的数作为基准。
下面,我写出我习惯的以第一个数为基准的快速排序,改良的就交给你了!!
//Asimple
#include <stdio.h> //打印数组
void show(int *a, int n)
{
int i;
for(i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
} //找合适的位置
int Find(int *a, int low, int high)
{
int temp = a[low];
while(low < high)
{
while(low<high && a[high] >= temp)
high -- ;
a[low] = a[high] ;
while(low<high && a[low] <= temp)
low ++ ;
a[high] = a[low] ;
}
a[low] = temp ; return low;
} //快速排序
void Quick_sort(int *a, int low, int high)
{
int pos;
if(low < high)
{
pos = Find(a,low,high); Quick_sort(a,low,pos-1);
Quick_sort(a,pos+1,high);
}
} int main()
{
int a[1001], n, i;
while(scanf("%d",&n)!=EOF)
{
for(i=0; i<n; i++)
scanf("%d",&a[i]); Quick_sort(a,0,n-1);
show(a,n);
} return 0;
}