Python四大流行排序算法详解--快速排序-冒泡排序-选择排序-插入排序。

就作者而言使用Python经常用到的排序算法就是快速排序、冒泡排序、选择排序以及插入排序

      就时间复杂度而言,快速排序是高级排序,查找快速,时间复杂度为nlgn

     而冒泡排序、选择排序、插入排序则是比较低级的查找算法,时间复杂度为n**2

 

下面我们来看快速排序:

快速排序的思想是:

首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
时间复杂度:O(nlgn)

解析: 

       首先介绍运用的技术:递归函数、列表生成式

       1.首先向函数中传入一个要排序的列表

       2.判断列表中的数据,如果是一个空列表或者列表中只有一个元素则返回原列表

       3.然后应用列表生成式生成符合条件的(先随机生成一个数,判断列表中大于这个数的借用列表生成式生成小列表,继续放到函数中递归,直到分成只有两数比较之后的小列表)列表,然后拼接到一块形成一个完整的列表返回

 

下面来看冒泡排序

冒泡排序是基础的排序方法,相信只要是计算机专业的学生都学过这个冒泡排序,现在我就再聊聊吧

先来聊聊冒泡排序的思想吧

冒泡排序其实就是两两比对,即第一个和第二个比,第二个和第三个比......如果前面的比后面的大就交换位置。这样一轮比对下来最大的数就会排到最后面了,然后第二轮、第三轮......对比到最后最小的数就会排到最前面.....

下面来看看代码:

代码解析:

    1.第一个for循环控制的是对比多少轮,因为大最后一轮的时候其实都已经排序完毕了,不需要再排了,所以只需要排len(List)-1次。

    2.第二个for循环控制的是两两对比的次数,因为第一行固定要对比len(List)-1次,而第二次的时候最后一个已经固定为最大,所以第二次只需要对比len(List)-1-1次,同理第三次为len(List)-1-2次......

    3. 然后对控制对比次数的j循环进行对比。如果前面的大于后面则进行交,最后的到排序完成的列表,但是运算复杂,时间复杂度高

 

再来聊聊选择排序

其实选择排序和冒泡排序很相似,时间复杂度相同。只是选择排序是定死第一个数,用这个数与剩余的每个数进行对比,这样最后就会得到最小的数房子第一个位置,第二轮定死为第二个,与剩下的再进行对比.....最后最大的就会放到最后,排序完成

用专业术语就是:

选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例):

  1. 选择一个基准球

  2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换

  3. 第一轮过后获得最小的球

  4. 在挑一个基准球,执行相同的动作得到次小的球

  5. 继续执行4,直到排序好

时间复杂度:O(n^2).  需要进行的比较次数为第一轮 n-1,n-2....1, 总的比较次数为 n*(n-1)/2

下面来看看代码实现:

代码解析:

      1.第一个for循环仍然控制进行对比的轮数,到最后一组的时候其实以及排序完成,所有不用再来一轮,最后的对比轮数为len(List)-1

      2. 第二个for循环是控制对比的次数,由于每次定死一个,而且第一轮第一个固定最小,第二轮第一个第二个固定......所有对比的区间应该定为[i+1, len(List)-1]

      3.因为每次对比都是定死前面的,第一轮定死第一个,第二轮第二个与后面对比,第三轮第三个......,所以应该定死轮数i代表的那个数,与后面每个j进行对比。即判断 List[i]是否大于List[j],然后进行交换

最后我们再来聊聊插入排序算法

插入排序算法和冒泡、选择排序相同,都是低级算法,时间复杂度相同,都很高

插入排序原理很简单,和冒泡排序极为相似,不过它是从后面向前对比,它所插入的必须是一个有序的,它与它前面的所有数一个一个的对比,知道找到比他小的就停止对比

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序 
基本思想为:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 
插入排序就是用一个数与一个已排好序的序列进行比对,从右向左进行。 
例:5与3进行比较,5>3,将5与3不进行交换。l=[3,5], 
此时再进行排序。4 < 5 l=[3,4,5] 3<4不进行交换,l=[3,4,5] 

来看看实现代码把:

代码解析:

      1. 第一个循环仍然是判断对比的轮数

      2. 第二个for循环是形成第一个循环数为基准形成的反序列表,如当i=5时,形成列表[5, 4, 3, 2, 1],然后用来判断对比的次数

      3. 然后用当前的数与前一个数进行对比,如果小于前一个数的话就进行交换,如果找到前一个数比自己小就停止交换

 

以上就是作者对四大常用排序算法的总结,如果对大家有用的话点个赞哦!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值