广告位联系
返回顶部
分享到

Flutter Dart快速排序算法介绍

相关技巧 来源:互联网 作者:佚名 发布时间:2022-12-11 16:46:23 人浏览
摘要

在日常研发的过程中,我们无时无刻都在考虑自己开发的程序是否高效,一段好的程序执行离不开对算法的深刻认识和熟练掌握。接下来的日子,我将带着大家一起重温一下常见的几种

在日常研发的过程中,我们无时无刻都在考虑自己开发的程序是否高效,一段好的程序执行离不开对算法的深刻认识和熟练掌握。接下来的日子,我将带着大家一起重温一下常见的几种算法。

先上大图: 

下面我们一起来学习一下 快速排序算法 吧!

快速排序算法

维基百科介绍: 快速排序使用分治法(Divide and conquer)策略來把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列,最终合并得到一个从小到大的序列。

有聪明的小伙伴就会问了:什么是分治法策略呢?

分治法(Divide and conquer)

字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

由此就可以引出我们今天讲的快速排序算法的实现步骤了:

  • 从数据中随机获取一个值,按这个值的大小对比分成左右两个数据集合,左边数据集合的值小于此值,右边反之
  • 将两边数据进行递归调用步骤1
  • 将所有数据合并

快速排序算法实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

void main() {

  List<int> quickSort(List<int> arr) {

    // 处理边界问题

    if (arr.length <= 1) {

      return arr;

    }

    // 取出第一个值作为参考

    int splitData = arr[0];

    // 小于参考值的集合

    List<int> low = [];

    // 大于参考值的集合

    List<int> hight = [];

    // 与参考相等的集合

    List<int> mid = [];

    // 初次把参考值添加到mid中

    mid.add(splitData);

    for (int i = 1; i < arr.length; i++) {

      if (arr[i] < splitData) {

        // 小于

        low.add(arr[i]);

      } else if (arr[i] > splitData) {

        // 大于

        hight.add(arr[i]);

      } else {

        // 等于

        mid.add(arr[i]);

      }

    }

    // 二分数据后,再继续递归整理

    low = quickSort(low);

    hight = quickSort(hight);

    // 最后合并

    return [...low, ...mid, ...hight];

  }

  const List<int> ary = [4, 5, 1, 3, 6, 2, 5, 6, 7, 2, 4];

  print(quickSort(ary));

}

至此,我们就重新温习了一下 快排算法 !


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 : https://juejin.cn/post/7174713709188055099
相关文章
  • 程序猿表白妹子的代码神器
    女生眼中的程序员,身上带着好多标签直男,宅,不懂浪漫,枯燥,但这是因为你还没有了解程序猿,程序猿也可以非常浪漫。 程序猿用代
  • Flutter Dart快速排序算法介绍
    在日常研发的过程中,我们无时无刻都在考虑自己开发的程序是否高效,一段好的程序执行离不开对算法的深刻认识和熟练掌握。接下来的
  • VSCode如何巧用正则表达式快速处理字符段

    VSCode如何巧用正则表达式快速处理字符段
    正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为元字符)。 正则表达
  • s49 磁盘存储文件系统管理介绍

    s49 磁盘存储文件系统管理介绍
    第一部分 1、创建一个2G的文件系统 块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且
  • kill一条TCP连接实现方法

    kill一条TCP连接实现方法
    如果你的程序写得有毛病,打开了很多TCP连接,但一直没有关闭,即常见的连接泄露场景,你可能想要在排查问题的过程中,先临时kill一波
  • CTF AWD入门学习手册

    CTF AWD入门学习手册
    AWD赛制是一种网络安全竞赛的赛制。AWD赛制由安全竞赛专家及行业专家凭借十多年实战经验,将真实网络安全防护设备设施加入抽象的网络
  • Ceph集群CephFS文件存储核心概念及部署使用介绍

    Ceph集群CephFS文件存储核心概念及部署使用介绍
    1.CephFS文件存储核心概念 1.1.CephFS文件存储简介 官方文档:docs.ceph.com/en/pacific/ 传统的文件存储通常使用的是NAS存储,通过NFS协议来实现,
  • Git基础学习之文件删除操作命令介绍
    1、删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态。 若要是该文件未被Git管理,在工作区直接进行删除即可
  • 使用openssl实现私有CA的搭建和证书的颁发

    使用openssl实现私有CA的搭建和证书的颁发
    CA的相关该概念 PKI:Public Key Infrastructure 公共密钥加密体系 CA:Certificate Authority,证书签发机构.实现身份的验证的一个机构。 CA工作逻辑
  • VSCode搭建x264 源码调试环境的详细步骤

    VSCode搭建x264 源码调试环境的详细步骤
    1.下载 x264 https://www.videolan.org/developers/x264.html 解压后 2. 使用上一节介绍的方法为 x264 生成支持 debug 的 x264.exe 我在 D盘 创建一个新的文件夹
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计