算法冒泡排序

alist = [1,5,0,9,2]–升序—[0,1,2,5,9]
思路:–相邻元素对比,大的值往后移
0- 每一次找一个较大值—需要找len(alist)-1

    1- 第1次  9 -----对比len(alist)-1---4
        1- [1,5,0,9,2]--1,5对比  5大,不需要交换 1 和5 位置
        2- [1,5,0,9,2]--5,0对比  5大,需要交换 5 和0 位置 --[1,0,5,9,2]
        3- [1,0,5,9,2]--5,9对比  9大,不需要交换 5 和9 位置
        4- [1,0,5,9,2]--9,2对比  9大,需要交换 9 和2 位置 [1,0,5,2,9] 
        
    2- 第2次  5 ---对比len(alist)-2---3
        1- [1,0,5,2,9] --1,0对比  1大,需要交换 1 和0 位置[0,1,5,2,9]
        2- [0,1,5,2,9] --1,5对比  5大,不需要交换 1 和5 位置[0,1,5,2,9]
        3- [0,1,5,2,9] --5,2对比  5大,需要交换5 和2 位置[0,1,2,5,9]
        
    3- 第3次  2 ---对比len(alist)-3---2
        1- [0,1,2,5,9] --0,1对比  1大,不需要交换 0 和1 位置[0,1,2,5,9]
        2- [0,1,2,5,9] --1,2对比  2大,不需要交换 1 和2 位置[0,1,2,5,9]
        
    4- 第4次  1------对比len(alist)-3---1
        1- [0,1,2,5,9] --0,1对比  1大,不需要交换 0 和1 位置[0,1,2,5,9]

代码实现1:

def mysort(alist):
    for i in range(0, len(alist) - 1):  # 需要遍历的次数是所有元素的少一次,比如5个元素,去最大值,要比较4次
        for j in range(0, len(alist) - i - 1):  #每一个元素要遍历的次数
                  #只是交换次数,但是要不要交换取决于相邻值的大小
            if alist[j] > alist[j + 1]:   #如果前面大于后面的值,就换位置
                alist[j], alist[j + 1] = alist[j + 1], alist[j]
    return alist

结果:
print(mysort([1,5,10,8,9]))

代码实现2:

思路2:

  1. 创建一个新的列表newList
  2. 先找出所有元素中最小的,append在newList里面
  3. 再找出剩余的所有元素中最小的,append在newList里面
  4. 依次类推,直到所有的元素都放到newList里面
def mySort(inlist):  # 定义一个列表变量
    newlist = []  # 结果是一个新的列表变量
    while len(inlist) > 0:  # 只要inlist里面还有值,就执行循环
        minData = inlist[0]  # 假定第一个元素最小
        minIndex = 0  # 第一个元素最小下标
        idx = 0  # 当前元素的下标
        for one in inlist:  # 遍历这个列表
            if minData > one:  # 如果假定的最小值比其中一个大
                minData = one  # 交换值
                minIndex = idx  # 交换索引
            idx += 1  # 每次遍历的时候索引都加1
        newlist.append(minData)  # 把找到的最小值追加到新的列表中
        inlist.pop(minIndex)  # 把老的列表中的元素删掉
    return newlist


print(mySort([1, 9, 6, 5,89,2,4,656]))

结果:[1, 2, 4, 5, 6, 9, 89, 656]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初遇我ㄖ寸の热情呢?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值