冒泡排序(简单易用的排序,通俗易懂的讲解,排序基础三人组之一)

  今天是数据结构与算法专栏的第一天,从最简单的冒泡排序开始吧~

 


1.冒泡排序的原理。

    冒泡排序是对数组或序列进行从小到大(或从大到小)进行排序的一种算法。是三种基础排序方法之一。冒泡排序需要使用两次循环,内层循环和外层循环。内层循环负责每一趟的两个元素的比较和需要循环进行的操作,外层循环负责需要对比的趟数。

    内层循环中每一次从第一个元素开始,如果这个元素比后面一个元素大,就把这个元素和后面的一个元素交换位置,如果比后面一个小,就不做变化。这样每一趟都会有一个最大的元素放在最后,放在最后的元素就不需要去动了。

原理可视化:


2.代码实现。

    给栋梁端上代码: 

list = [2, 3, 1, 5, 4]
for i in range(len(list) - 1):
# len函数获取的是列表的元素的个数,减i是因为每次执行完内循环后,最大的一个数就放到了最后,不需要再比较
    for j in range(1, len(list) - i):
        if list[j - 1] < list[j]:  # 每一次比较,如果前面一个元素比后面一个大,就交换位置
            list[j - 1], list[j] = list[j], list[j - 1]

3.关于代码的优化。

    在冒泡排序中,我们有概率会遇到已经从小到大排好了的列表,如果在一次次比较会非常浪费时间,冒泡排序属于时间复杂度比较高的排序方式,所以,我们可以这样优化。

    先定义一个变量isExchage = False。在内层循环中,如果至少发生了一次元素的位置交换,就把isExchange赋值为True,在第一趟走完后,如果一次交换也没有发生,则说明原来的序列是从小到大排列的,便直接返回序列,结束即可。

优化:

list = [2, 3, 1, 5, 4]
def bubble_sort(list):
    isExchange = False
    for i in range(len(list) - 1):
        for j in range(1, len(list) - i):
            if list[j - 1] < list[j]:
                list[j - 1], list[j] = list[j], list[j - 1]
                isExchange = True
        if not isExchange:  # 如果第一次循环发生了数值交换,以后就不会再执行该语句了
            return list
    return list

4.冒泡排序的时间复杂度。

    冒泡排序时间复杂度为O(n²),时间复杂度较高,一般很少使用。


好啦~写完下班了⨎

客官看一看,给个免费的点个赞也好啊~呜呜~救救孩子吧

回应我吧,看官!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值