• 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("
    ");
    }
    
    //找合适的位置
    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;
    }
    
    低调做人,高调做事。
  • 相关阅读:
    Java反射之访问私有属性或方法
    java字符串中显示双引号
    什么导致spring事务失效
    ActiveMq性能优化
    JFrame关闭事件处理
    c3p0数据库连接池死锁问题
    Mongodb性能优化
    Spring事务配置的五种方式
    ActiveMq启动停止
    JScrollPane动态加载图片
  • 原文地址:https://www.cnblogs.com/Asimple/p/5455125.html
Copyright © 2020-2023  润新知