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;
}

 

posted @ 2016-05-03 15:24  Asimple  阅读(1535)  评论(0编辑  收藏  举报