美文网首页
快速排序

快速排序

作者: Day_Winston | 来源:发表于2018-01-09 21:43 被阅读9次

    快速排序

    相较冒泡排序,快速排序更为高效,主要在于冒泡排序是两两进行比较,而快速排序是在你所要进行排序的序列中寻找一个基准数,然后将序列进行排序,使序列左边都是小于该基准数的,序列右边都是大于该基准数的;序列左右两边别作为子序列,在进行同样操作,直到不可拆分出新的子序列为止。简单地说就像站队一样,找个人当基准,然后比他矮的都在左边,高的都站右边。

    • 例子: 30,22,15,64,89,70,85,32,11,15;10个数进行快速排序。
    • 代码演示
    #include<stdio.h>
    int a[100], n;                        //定义两个全局变量
    
    void quicksort(int left, int right)
    {
        int i, j, t, temp;
        if(left > right)
            return;
    
        temp = a[left];                   //temp中存的就是基准数
        i = left;
        j = right;
        while(i != j)
        {
            while(a[j] >= temp && i < j)  //从右往左,找寻比基准数大的。
                j--;
            while(a[i] <= temp && i < j)  //从左往右,找寻比基准数小的。
                i++;
    
            if(i < j)
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        a[left] = a[i];
        a[i] = temp;
    
        quicksort(left, i - 1);            //处理左边
        quicksort(i + 1, right);           //处理右边
        return;
    }
    
    int main()
    {
        int i;
        scanf("%d", &n);                   //读入你所要排序的数的数量。
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]);            //读入你所要排序的数。
    
        quicksort(0, n - 1);
    
        for(i = 0; i < n; i++)
            printf("%d ", a[i]);
    
        getchar();getchar();
        return 0;
    }
    /*读入数据
     * 10
     * 30 22 15 64 89 70 85 32 11 15
     * 输出结果为:11 15 15 22 30 32 64 70 85 89 
     */
    

    • 例题2:为建立一个图书角,而购进一批书,征集了学生的建议后,将学生想读的书的ISBN号记录下来,因同一本书只够买一本,即ISBN号只有一个(去重),第二还要将ISBN号进行排序,按从小到大的顺序进行排列,最后,程序运行时间要求为1秒钟。
    • 解析所学三种排序算法中,桶排序最快,但是不知道ISBN号是多大的数字,所以桶排序PASS掉;冒泡排序在数量N,即多少本书有要求,如果超过100本,时间上就不如第三种快速排序了,所以在此使用排序算法更为合适。
    • 代码示例:

    因为代码近乎一样,所以只演示一部分

    //在最后输出的时候,后面加两行代码。
    if(a[i] != a[i-1])
        printf("%d",a[i]);
    //起到一个去重的目的。
    

    相关文章

      网友评论

          本文标题:快速排序

          本文链接:https://www.haomeiwen.com/subject/mbwgnxtx.html