每日算法之——常见排序算法集锦(算法之发展历程)

本文介绍了排序算法的发展历程,从冒泡排序、选择排序到插入排序、希尔排序,再到堆排序、快速排序和归并排序。通过理解它们之间的改进关系,帮助读者更好地记忆和理解各种排序算法的优劣及其思想。
摘要由CSDN通过智能技术生成

常见排序算法及发展历程

所谓排序,就是将数据分为有序区和无序区,通过对无序区元素的调整并扩展有序区,最后达到所有元素都有序的状态。

在排序界,常见(或者说常用)的算法主要有冒泡排序,选择排序、直接插入排序、希尔排序(其实不太常用)、堆排序、快速排序、归并排序。一些不太常用但是比较有技巧性的排序有:计数排序、位图排序、基数排序、桶排序、外部排序(一般结合hash然后多路归并)。在此,我们仅仅介绍常规的排序。

联系发展的眼光看待事物是一个优秀程序员必备的品质,在面对一个新鲜事物的时候我们不仅要问为什么这个事物会出现,这个事物的出现解决了什么问题,他是由什么事物发展而来的。。。。。。一个事物不可能凭空出现,存在必有其存在的道理。回归到我们的排序算法,很多人常常抱怨排序算法太多了,记不住,一会冒泡一会堆,晕头转向。记不住的原因还是把各个算法孤立开来看待了,下面我们就用联系发展的眼光来捋一捋这些算法的发展历程以及每个算法相对于其之前的算法的优越的地方,也许你就能记忆深刻。

冒泡排序:

冒泡排序的基本思想是对比前后两个元素,如果逆序那我就交换两个位置上的元素,这样的过程重复n次,因此其比较和交换的次数都是n^2

后来有人就想,你冒泡排序每一次比较都要交换,那么我可不可以先不交换元素位置,直到我找到无序区中的最小元素的时候,我再把最小元素放到有序区的末尾的位置呢,这样就减少了交换的次数,岂不是能节省很多不必要的交换,有了这个思想,于是有了我们的选择排序。

选择排序:

选择排序的基本思想是每一趟排序我只找到无序区元素中最小的元素位置,然后将该元素放到有序区中的末尾位置,达到扩展有序区的目的。由于减少了交换的次数,所以选择排序是较冒泡排序优越的排序算法。

但是呢,我每一次都要去无序区中找最小元素的位置,麻烦。既然我都已经把整个待排序的数组划分为了有序区和无序区,那么为何不在访问无序区元素的过程中,我将当前访问的元素在有序区中找到一个合适的位置放下不就好了么??于是有了插入排序。

插入排序:

想象打扑克时抓牌和整理牌的情形,当手中的牌已经有序时,再次抓起来的牌只需要找一个合适的位置放好即可。在插入排序中,假设第一个元素是有序的,从第二个起依次找到有序区合适的位置插入即可。插入排序中需要移动元素的位置,当数组基本有序(小的基本在前边,大的基本在后边)的时候,插入排序的效率最高。时间复杂度依然是O(

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值