0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

2分钟看懂快速排序的算法

学益得智能硬件 来源:学益得智能硬件 2023-02-25 09:32 次阅读

之前有同学提出想要复习一下排序算法,那我们今天就挑一个难度中等的,快速排序。

先搞清楚快速排序原理,然后再写代码。

快速排序的原理不难,先找到一个数字,我们把它称作基准,然后通过一系列的比较交换,能让基准达到一个合适的位置,保证基准前面的数字都比他小,后面的数字都比他大。

8c9db78a-b2b0-11ed-bfe3-dac502259ad0.png

这个过程需要两个指针 x 和 y,其实就是数组的下标,x指向数组第一个数字,y指向数组最后一个数字。

为了操作方便,我们一般以第一个数字为基准。

先把他记下来。

8cb9180e-b2b0-11ed-bfe3-dac502259ad0.png  

然后从 y 开始,4比3大,不用管,y 向前移动。

8cdc0d78-b2b0-11ed-bfe3-dac502259ad0.png  

2比 3 小,比基准小的数字应该放在左边,所以把 2 移动到前面,同时 x 向后移动。

8d15da1c-b2b0-11ed-bfe3-dac502259ad0.png  

6比 3 大,放在后面,y 向前移动。

8d5014ac-b2b0-11ed-bfe3-dac502259ad0.png  

0比3小,放在前面,x向后移动。

8d85eba4-b2b0-11ed-bfe3-dac502259ad0.png  

7比3大,放在后面,y 向前移动。

8db8b886-b2b0-11ed-bfe3-dac502259ad0.png  

最后,x 和 y 相等,把3放到这个位置上。

8dd9834a-b2b0-11ed-bfe3-dac502259ad0.png

第一轮移动结束。现象就是,3的前面都是比3小的,3的后面都是比3大的。

接下来就是对3的前面和3的后面做同样的操作,我们应该立马能想到递归。

搞清楚了原理还不够,作为求职者把代码写出来才是王道。

#include 


void quick_sort(int *a, int start, int end)
{
    if (start >= end)
        return;


    int x = start;
    int y = end;
    int base = a[start];


    while (x < y)
    {   
        while (a[y] > base && x < y)
        {   
            y--;
        }   


        if (x < y)
        {
            a[x++] = a[y];
        }


        while (a[x] < base && x < y)
        {
            x++;
        }


        if (x < y)
        {
            a[y--] = a[x];
        }
    }


    a[x] = base;


    quick_sort(a, start, x - 1);
    quick_sort(a, x + 1, end);
}


int main()
{
    int array[] = {3, 6, 7, 0, 2, 4};


    quick_sort(array, 0, 6);


    for (int i = 0; i < 6; i++)
    {
        printf("%d ", array[i]);
    }


    return 0;
}
快速排序是不是真的很快? 我们可以和冒泡排序做个对比,修改下代码,随机产生5万个数据,使用冒泡排序和快速排序,时间上的差别确实很大。

冒泡排序:
real  0m8.255s
user  0m8.098s
sys  0m0.008s
快速排序:
real  0m0.078s
user  0m0.010s
sys  0m0.000s
要说原因的话,冒泡排序只能相邻位置上比较移动,但是快速排序却可以跳着来,所以大部分情况下,快速排序效率都要高于冒泡排序。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 排序算法
    +关注

    关注

    0

    文章

    52

    浏览量

    10047
  • Array
    +关注

    关注

    98

    文章

    18

    浏览量

    17590

原文标题:2分钟看懂快速排序

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入排序、希尔
    发表于 07-17 10:12 1053次阅读
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介绍

    十大排序算法总结

    排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是
    的头像 发表于 12-20 10:39 1070次阅读

    matlab快速排序算法实现

    待排的记录分割成独立的两部分,%其中前一部的 记录的关键字均比另一部记录的关键字小,%再分别对两组记录进行递归分割,达到排序的目的%平均时间复杂度为O(log2(n))functi
    发表于 02-29 15:58

    嵌入式stm32实用的排序算法 - 交换排序

    合很多,我这里就不再一一举例说明,掌握排序的基本算法,到时候遇到就有用武之地。Ⅱ、排序算法分类1.按存储分类:内部排序和外部
    发表于 04-12 13:14

    基于Hadoop的几种排序算法研究

    如何高效排序是在对大数据进行快速有效的分析与处理时的一个重要问题。首先对基于Hadoop平台的几种高效的排序算法(Quicksort,Heapsort和Mergesort
    发表于 11-08 17:25 15次下载
    基于Hadoop的几种<b class='flag-5'>排序</b><b class='flag-5'>算法</b>研究

    C语言教程之几种排序算法

    数据结构的排序算法有很多种。 其中, 快速排序 、希尔排序、堆排序、直接选择
    发表于 11-16 10:23 1743次阅读

    常用排序算法分析

    一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并
    的头像 发表于 07-13 16:13 2131次阅读

    实用的排序算法 - 交换排序

    实用的排序算法 - 交换排序
    的头像 发表于 03-20 09:53 1713次阅读
    实用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b> -  交换<b class='flag-5'>排序</b>

    排序算法分享:归并排序说明

    我们今天继续给大家分享排序算法里面的另外一种排序算法:归并排序
    的头像 发表于 12-24 14:34 748次阅读

    浅谈希尔排序算法思想以及如何实现

    01 希尔排序算法思想 希尔排序也是一种插入排序,是简单插入排序改进后的一个更高效版本,同时也是首批突破O(n^
    的头像 发表于 06-30 10:05 1996次阅读

    C语言排序快速排序的技巧

    快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n
    的头像 发表于 07-29 15:14 2440次阅读
    C语言<b class='flag-5'>排序</b>中<b class='flag-5'>快速</b><b class='flag-5'>排序</b>的技巧

    2分钟快速教你如何在华为模拟器ensp上进行抓包?

    2分钟快速教你如何在华为模拟器ensp上进行抓包?
    的头像 发表于 12-05 11:25 4398次阅读

    排序算法有哪些

    合并 我们来具体看看例子,假设我们现在给定一个数组:[6,3,2,7,1,3,5,4],我们需要使用归并算法对其排序,其大致过程如下图所示: 阶段可以理解为就是 递归拆分子序列 的
    的头像 发表于 10-11 15:49 575次阅读
    <b class='flag-5'>排序</b><b class='flag-5'>算法</b>有哪些

    分钟看懂雪崩光电二极管

    分钟看懂雪崩光电二极管
    的头像 发表于 11-23 09:09 1808次阅读
    三<b class='flag-5'>分钟</b><b class='flag-5'>看懂</b>雪崩光电二极管

    分钟看完看懂电机的接线方法

    今天给大家讲解一下,看懂电机的接线方法,一分钟看完,一看就懂!。 电机的接线方法无外乎以下两种 1a星形接法(实物图)
    发表于 03-31 15:40 2995次阅读
    一<b class='flag-5'>分钟</b>看完<b class='flag-5'>看懂</b>电机的接线方法