通常情况下,我们对数组的操作远远不止遍历判断大小或者判断奇偶数这么简单。比如,当我们需要求一个数组中所有元素的平均值时,操作很简单,只需要去遍历这个数组,并将其内部所有元素中存储的内容进行求和,最后用所有元素内容的和去除以元素个数,就可以得到最终数组的平均值。这个问题很简单。但是如果我们要求解这个数组中的中位数时,应该怎么做?此时我们来分析下,由于数组中的数值存放顺序并不是固定的,因此每个元素中存储的内容并不一定是按照存储数值从大到小存放的,也不一定是按照从小到大存放的。因此如果要求解中位数这样的算法,一定要对数组中的内容进行排序,而数组的排序操作是一种稍微有点难度的运算,因此这一小节的内容请大家开始全神贯注地看一下。(1)冒泡排序法冒泡算法,在传统的C语言教科书上讲的很多,它是一种比较稳定的排序算法。大家在使用这个排序算法的时候,可以从它的名字来联想一下它的实现形式。一说到冒泡,大家首先想到的是一条小鱼在水里游着,并且"布鲁布鲁"的吐出一串串小气泡,冒到水面上。其实冒泡排序法也和小于吐泡泡一样,每次只吐出一个,并且连续不断地一个接一个吐。冒泡排序算法的中心思想,即是相邻的两个数进行比较后根据大小需求交换位置。先从最简单的两个元素的数组看起,由此进行举一反三。假设一个数组内部只有两个元素"int array = {8, 0};"。对其进行排序时,我们仅需要做一次判断即可以知道哪个元素大,哪个元素小,假设我们从小到大进行排列,那么排列出的结果就应该是"array = {0, 8};"。再看当有三个元素的数组。假设一个数组内部只有两个元素"int array = {8, 0, 1};"。那我们还是进行两两比较,第一次比较,可以得出数组应该为"array = {0, 1, 8};",也是只需要一次比较就可以完成数组的排序。但如果数组改变一下元素的位置,即"int array = {8, 1, 0};",那么我们再来看一下,第一次两两元素比较变成了"array = {1, 0, 8};",因此碰到这种极端情况时,冒泡法一次比较完成不了排序,那么应该进行第二次比较,最终第二次比较我们可以得出结果"array = {0, 1, 8};"再来看看四个元素时候数组的排序,这次我们举一个极端情况,即将一个从大到小排列的数组变成由小到大的顺序排列。数组为"int array = {9, 8, 1, 0};"。那么此时第一次相邻两个元素比较可以得出"array = {8, 1, 0, 9};",第二次相邻元素两两比较可以得出"array = {1, 0, 8, 9};",第三次两两比较可以得出"array = {0, 1, 8, 9};"。基于上述的分析,我们可以知道,一个数组如果有n个元素需要进行排序时,其排序的极端情况应该是n-1次。具体的排序流程,见图5-4-1。

图5-4-1 冒泡排序法的流程因此根据上述分析,我们可以写出代码如图5-4-2所示。

图5-4-2 冒泡法排序接下来,我们将程序改装一下,让它在每一步相邻两个元素比较的过程打印出来,如图5-4-3所示。我们可以看到,越大的元素会经由交换慢慢"浮"到数列的顶端(升序或降序排列),就如同水里的小金鱼吐出的泡泡一串串慢慢浮出水面,故名"冒泡排序"。

图5-4-3 冒泡法排序单步打印 (2)选择排序选择排序,俗称"硬着头皮排序",当然这个"硬着头皮排序"是我给它取的名字,因为它是最最直观的排序方法,完美诠释了"暴力美学"这四个字。要理解选择排序,先想象一下小学上体育课时,老师是怎么排列队伍的。先从小朋友里面随便拉一个老师认为最矮的同学出来,让他做排头,然后依次拿其他的同学和他比较,如果比他高,就放到其后面去,比他矮就放到前面,接着再来目测第二个,以此类推。当然上面这段话是描述的体育老师内心思路。而我们对数组排序的时候,同样可以使用这种方式。我们可以先指定一个排头兵,假设我们要进行从小到大排列时,那我们先假设第一个元素为数组中最小的元素,接着分别去和剩余的其它元素比较,如果发现比它小的,那么将其自己和那个元素互换,用这种方式,只需要遍历完整个数组,就可以把最小的元素放到首个元素的位置了。如图5-4-4所示。

图5-4-4 选择排序做一次遍历比较图5-4-4中,我们通过第一次的遍历比较,将最小的元素排列到了数组的最左端,而接下来要做的,只需要一次将剩余的9个元素进行比较,找出最小值,再放到0右边,以此类推,最后我们可以写出如图5-4-5所示的选择排序程序。

图5-4-5 选择排序法对于数组的排序算法,我们目前就讲述这两种,其实还有很多现代的比较快速的排序算法,我们以后再说。这两种排序算法对于很多第一次接触C语言的读者来说,还是比较难理解的,因此还是需要多花功夫多多演练。

arraylist从大到小排序_程序猿面试宝典:你该知道的数组排序算法相关推荐

  1. arraylist从大到小排序_初学Python最简易入门之十四排序算法10对字典排序

    当用sorted()函数对字典临时排序的时候,默认是对字典键名从小到大排序,排序的结果以列表的形式输出.如图14-10-1所示实例14-10-1用sorted()对棋类字典排序.pyw,程序执行结果见 ...

  2. arraylist从大到小排序_经典排序方法的python实现和复杂度分析

    1.冒泡排序: 冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数 ...

  3. arraylist从大到小排序_为什么插入排序比冒泡排序更受欢迎?

    1. 插入排序和冒泡排序的时间复杂度 插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢? 2. 先看一下排序算法的几个概 ...

  4. 刷题小程序【程序猿面试宝典】开发(二)| 页面创建、页面配置、全局配置

    文章目录 1.创建页面 2.设置 tabBar 3.设置全局配置 window 4.设置页面相关配置 5.自定义全局CSS样式 6.自定义公共class样式 7.小试牛刀,全局设置页面背景色 8.结束 ...

  5. 刷题小程序【程序猿面试宝典】开发(一)| 项目概述与前期准备

    文章目录 1.项目概述 1.概述与主要功能 2.实现技术 2.前期准备 1.注册微信小程序 2.创建普通小程序项目 3.开通云服务 4.测试云服务 5.优化小程序目录结构 3.本期源码 微信公众号[C ...

  6. GEEK学习笔记— —程序猿面试宝典笔记(二)

    所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~ 程序猿面试宝典笔记(一)基本概念 程序猿面试宝典笔记(二)预处理.const和sizeof 程序猿面试宝典笔记(三)auto_ptr ...

  7. c++ sort 从大到小排序_算法的艺术:MySQL order by对各种排序算法的巧用

    在 [精华]洞悉MySQL底层架构:游走在缓冲与磁盘之间 这篇文章中,我们介绍了索引树的页面怎么加载到内存中,如何淘汰,等底层细节.这篇文章我们从比较宏观的角度来看MySQL中关键字的原理.本文,我们 ...

  8. arraylist从大到小排序_JAVA零基础入门课程笔记----数组排序

    一.什么是数组 * 数组是一个变量,存储相同数据类型的一组数据: * 声明一个变量就是在内存空间划出一块合适的空间 * 声明一个数组就是在内存空间划出一串连续的空间 二.数组的基本要素 标识符:数组的 ...

  9. arraylist从大到小排序_java基础算法之二叉树排序(递归)

    一.二叉树介绍 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.二叉树由各种节点组成,如下图所示: 每个节点都可以有左子节点,右子节点 每一个节点都有一个值 二叉树遍历: 二叉树的遍历分左序, ...

最新文章

  1. 阎崇年:《袁崇焕传》自序
  2. 信息系统项目管理知识--项目人力资源管理
  3. CGTN专访第四范式裴沵思 阐释数字化转型背后的驱动力
  4. 使用MONGODB 集群的OPLOG 日志进行数据恢复
  5. java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
  6. 在Windows 7中禁用或修改Aero Peek的“延迟时间”
  7. 【数据库】Mysql日期/时间相关函数汇总
  8. Android:adb进程问题
  9. xrdp协议_XRDP与VNC的关系(转载)
  10. 一篇关于Content Type的文章
  11. 分析RocketMQ消费端长轮询的源码实现
  12. linux rhel 7系统启动过程
  13. python的seek用法
  14. UVM Primer Ch2 A Conventional Testbench for the TinyALU
  15. 解决conda install pkgs found conflict问题
  16. 如何应对工作中的冲突?
  17. DSO(1)——DSO论文详细解读
  18. 基于C语言的 WAV 文件双声道转单声道的实现
  19. python agg函数_python – 将百分位数传递给pandas agg函数
  20. 51Nod基础组(Python)

热门文章

  1. Netweaver是如何判断哪些对象可以被增强的
  2. SAP Cloud for Customer的微信集成原型开发完毕后的效果示意图
  3. SAP CRM产品主数据无法根据产品描述字段进行搜索的原因
  4. 透过率和反射率的关系_全国本科率只有不到百分之五?!醒醒吧!
  5. 专家系统出现的计算机应用阶段,接本第一二章历年考题08-12
  6. 宽高自适应_css样式写出三角形,宽高自适应的正方形,扇形!
  7. redis订阅执行一段时间自动停止_面试系列 redis 分布式锁amp;数据一致性
  8. win10系统中环境变量path变成一行显示(配置环境)
  9. sklearn 决策树例子_机器学习|决策树的生成过程是怎样?(一)
  10. 计算机网络实验中S1是啥意思,某计算机A需要访问域名www.yy.com,它首先向本域DNS服务器S1查询,.._简答题试题答案...