快速排序

快速排序

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

  • 例子: 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]);
//起到一个去重的目的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pi...
    黎景阳阅读 471评论 0 1
  • 概述 快速排序是面试中的常见题,每次简述一遍快速排序的原理便觉得仿佛已经掌握了它。不是挺简单的吗?然而实际实现的时...
    芥丶未央阅读 1,578评论 0 0
  • 快速排序,顾名思义,它的效率是比较高的。快速排序采用的思想是分治法,通过一趟排序将要排序的数据分割成独立的两部分,...
    红狮子座阅读 295评论 0 2
  • 蛮小妻阅读 492评论 4 8
  • 好怕你说你爱我 这会让我不安和忐忑 因为我不爱你 我已经刻意保持了距离 我想传达我的冷漠 世上还有另一种心有灵犀 ...
    茶润人生阅读 173评论 2 1