快速排序法

要知道,,冒泡排序法时间复杂度为o(n2),假如我们的计算机每秒钟可以运行 10 亿次,那么对 1 亿个数进行排序,桶排序只需要 0.1 秒,而冒泡排序则需要 1 千万秒,达到 115 天之久,是不是很吓人,可谓是时间复杂度非常高,,有一位国外教授曾经说过,冒泡排序除了他有一个好听的名字和简单的理解之外,没有任何推荐的价值。(桶排序浪费空间,冒泡排序浪费时间)
于是,接下来要选择一种更加快速的排序方法—-快速排序。

    快速排序:二分法原理排序。

假设我们现在对“6 1 2 7 9 3 4 5 10 8”这 10 个数进行排序。
首先在这个序列中随便找一个数作为基准数。为了方便,就让第一个数 6 作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在 6 的右边,比基准数小的数放在 6 的左边,
分别从6的两边开始“探测”,(可以设两个变量i,j)先从右往左寻找一个比6小的数,然后从左往右寻找一个比6大的数,然后交换,最后知道两个变量碰头,把六换过去。
这里写图片描述
这里写图片描述
然后这个时候完成了第一轮”探测“,
按照这个程序,继续完成第二、三轮嗅探,直到不可拆分出新的子序列为止。
这里写图片描述

这就是快速排序法,与冒泡排序法相比,快速排序法是跳跃的交换。
话不多说,上代码:

#include <stdio.h> 
int a[101], n;                        
void quicksort(int left, int right)
{
    int i, j, t, temp;     
    if (left>right)        
        return;             
    temp = a[left];           
    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);                
}  


int main()
{
    int i, j, t;               
    scanf("%d", &n);     
    for (i = 1; i <= n; i++)         
        scanf("%d", &a[i]);
     quicksort(1, n);                     

    for (i = 1; i <= n; i++)         
        printf("%d ", a[i]);
    getchar(); 
    getchar();     
    return 0;
}

ok,这就是要学习的快速排序法。。
结束,点个赞呗,鼓励一下啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值