一起talk C栗子吧(第三十一回:C语言实例--常用排序总结)

各位看官们,大家好,上一回中咱们说的是快速排序的例子,这一回咱们不说例子了,咱们把前面说过的

排序进行总结。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前几回说了常用的各种排序算法,它们各有各的特点,我在这里做统一的总结:

容易理解的排序算法是冒泡排序,而且也容易实现,只是性能相对低一些。最难理解的是快速排序,但是

它的性能是最好的。插入排序和选择排序在易理解方面和性能方面,介于冒泡排序和希尔排序之间。希尔

排序是插入排序的升级版,理解了插入排序后,就不难去理解希尔排序。而且希尔排序的性能比插入排序

高,不过比快速排序要低。

我在上面说的性能只是相对来说的,每种排序算法在特定的条件下才能发挥出它的性能优势来。我们说某

种排序算法性能高,是一个平均值。比如我们在前几回举过的例子中,容器中元素的数量都为10,这时候

对比性能最差的冒泡排序和性能最好的快速排序后,我们可以发现,它们的执行时间相同,待会给大家看

例子。这时候因为容器中元素数量小,所以体现不出快速排序的优势来。因此,大家在工作中,可以依据

实际的情况来选择不同的排序算法,如果不注重性能,那么选择一个容易实现的排序算法就可以,这样写

出来的程序也方便阅读。如果排序的内容不多,使用中等性能的希尔排序是个不错的选择,如果排序的内

容多,那么最好使用性能高的快速排序。

看官们,下面是我在Linux终端中使用time命令测试后的结果,供大家参考。大家可以修改容器中元素的

数量,自己来测试各个排序算法的性能。

time ./BubbleSort  //测试冒泡排序的时间

the elmt of array is :

70 27 52 96 38 83 35 0 85 50

after sort, the elmt of array is :

0 27 35 38 50 52 70 83 85 96

real    0m0.002s  //程序运行时间

user    0m0.000s

sys    0m0.000s

time ./QuickSort 
//测试快速排序的时间

the elmt of array is :

36 73 41 0 37 21 94 91 26 98

after sort, the elmt of array is :

0 21 26 36 37 41 73 91 94 98

real    0m0.002s 
//程序运行时间

user    0m0.000s

sys    0m0.000s

看官们,如果忘记了这些排序的原理,可以点击下面的链接进行查看:

想了解,冒泡排序,请点击这里

想了解,插入排序,请点击这里

想了解,希尔排序,请点击这里

想了解,选择排序,请点击这里

想了解,快速排序,请点击这里

各位看官,关于排序的总结咱们就说到这里。欲知后面还有什么例子,且听下回分解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-17 13:16:41

一起talk C栗子吧(第三十一回:C语言实例--常用排序总结)的相关文章

一起talk C栗子吧(第十一回:C语言实例--文件组织结构)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们说的是最小公倍数的例子,这一回咱们不说具体的例子,咱们说一下C例子中的文件 组织方法以及实际开发软件时的"文件组织结构方法". 看官们,在我前面写的例子中,只有一个源文件(也就是通常看到的.c文件).我没有单独写头文件(也 就是通常看到的.h文件),而是把头文件的内容放到了源文件中.主要是这些例子中关于头文件的内容不 多,如果单

一起talk C栗子吧(第二回:C语言实例--判断闰年)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C语言实例吧! 看官们,上一回中咱们给小说做了个开头,这一回咱们正式说C例子,这回说的例子是:判断闰年. 看官们,闰年是什么?这个是地理天文方面的概念.如果不明白的话,自己百度去,哈哈.我也偷一把懒. 看官们,判断闰年的方法有两种: 如果某年能被4整除,但是不能被100整除,那么这一年就是闰年. 如果某年能被400整除,那么这一年就是闰年. 看官们看到整除肯定想到除法了

一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了,这一回我们将对前面章回中的内容进行总结和提示. 内存布局总结 C程序的内存布局主要有四个分区:代码区,数据区(data和bss).堆区和栈区.能够使用readelf -S filename查看各个分区的内存地址.这四个分区在内存中从低地址空间開始依次向高地址延伸.我们再次使用前面章回中的图直观地展

一起talk C栗子吧(第二十一回:C语言实例--表达式求值)

各位看官们,大家好,前几回中咱们说了堆栈的原理,并且举了实际的例子进行解说,这一回咱们说的例 子是:表达式求值.表达式求值和上一回中说的括号匹配一样,都使用了堆栈的原理,大家可以从例子中 看出来,所以我们把它们放在一起.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在这里说的表达式为包含加,减,乘除的四则运算表达式.例如:1+2*3-4/5就是一个四则运 算表达式.这个表达式中,运算符在数字中间,所以我们叫它中缀表达式,这也是符合我们思维的一种表 现形式,不过,计算机就不理解中

一起talk C栗子吧(第二十九回:C语言实例--选择排序)

各位看官们,大家好,上一回中咱们说的是希尔排序的例子,这一回咱们说的例子是:选择排序.闲话休 提,言归正转.让我们一起talk C栗子吧! 选择排序的原理是:从容器中选择一个最大或者最小的元素,把该元素放到新的容器中,等到容器中的所 有元素都被选择完后,新容器中存放的元素就是有序的. 在实现选择排序时,我通过交换元素的位置,充分利用了容器的空间,而没有创建新的容器,这样可以节 省程序的存储空间.选择排序的实现步骤如下: 1.先实现一个可以从容器中找到最大元素或最小元素的函数,找到后返回该元素在容

一起talk C栗子吧(第二十八回:C语言实例--希尔排序)

各位看官们,大家好,上一回中咱们说的是插入排序的例子,这一回咱们说的例子是:希尔排序.闲话休 提,言归正转.让我们一起talk C栗子吧! 希尔排序是对插入排序的一种改进,希尔排序的原理:先将容器分成若干子容器,然后分别对子容器进行 插入排序,当子容器全部排序完毕后,对全部元素进行一次插入排序. 希尔排序的实现步骤: 1.选取一个增量,增量的大小可以自己定义,其大小在1到容器长度之间: 2.以容器头部到增量位置的元素为起点,从起点到容器尾部依次遍历容器: 3.在步骤2中的遍历过程中,选择一个当前

一起talk C栗子吧(第三十五回:C语言实例--测试程序运行时间)

各位看官们,大家好,上一回中咱们说的是巧用溢出计算最值的例子,这一回咱们说的例子是:测试程序 运行时间.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,在编写程序的时候,可能需要计算程序运行的时间.通过计算时间,可以查看程序的性能.其实 我们在第三十一回中对各种常用排序算法总结时也使用过这种方法,不过当时使用的是Linux提供的time 命令.如果大家忘记了第三十一回的内容,可以点击这里查看. 我们今天说的测试程序运行时间,是让程序自己测试运行时间,而不是像第三十一回中哪样借用其它工

一起talk C栗子吧(第一百二十一回:C语言实例--线程知识体系图)

各位看官们,大家好,上一回中咱们说的线程属性的例子,这一回咱们说的例子是:线程知识体系图.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面的章回中介绍了与线程相关的知识,在今天的章回中,我们将对这些知识进行总结,并且整理成一张知识体系图,方便大家掌握线程相关的知识. 下面是我们整理的知识体系图,请大家参数: 上图内容中的知识点都有相应的章回对应,下面是我整理的章回对应关系.为了大家方便,我设置了链接,大家可以直接点击链接跳到相应的章回中. 线程概念 线程概念:第一百零七回 线程标识

三十一、Git中的fetch和pull

Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge     git fetch origin master git log -p master..origin/master git merge origin/master 以上命令的含义:   首先从远程的origin的master主分支下载最新的版本到origin/master分支上   然后比较本地的master分支和origin/master分支的差别