Python编程:排序算法之冒泡排序

举报
彭世瑜 发表于 2021/08/13 23:29:31 2021/08/13
【摘要】 列表排序 将无序列表变为有序列表输入:无序列表输出:有序列表 常见的排序算法 名称时间复杂度空间复杂度冒泡排序O(n^2)O(1)选择排序O(n^2)O(1)插入排序O(n^2)O(1)快速排序mid堆排序high归并排序high基数排序少见希尔排序少见桶排序少见 排序算法关键点: 有序区无序区 冒泡排序 列表每两个相邻的数,如果前边的比后边的大,那么交换...

列表排序

  • 将无序列表变为有序列表
  • 输入:无序列表
  • 输出:有序列表

常见的排序算法

名称 时间复杂度 空间复杂度
冒泡排序 O(n^2) O(1)
选择排序 O(n^2) O(1)
插入排序 O(n^2) O(1)
快速排序 mid
堆排序 high
归并排序 high
基数排序 少见
希尔排序 少见
桶排序 少见

排序算法关键点:

  • 有序区
  • 无序区

冒泡排序

  • 列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数

代码实现


import random

# 冒泡排序,从小到大排序O(n^2)
def bubble_sort(lst): count = 0 n = len(lst) - 1  # 9 总遍历次数,比序列总数少1 for i in range(n): # 0-8 for j in range(n-i): # 8-0 if lst[j]>lst[j+1]:  # 前者比后者大则交换 lst[j], lst[j+1] = lst[j+1], lst[j] count += 1 print("count: %s", count)

# 冒泡排序改进,从小到大排序
def bubble_sort_1(lst): count = 0 n = len(lst) - 1  # 9 总遍历次数,比序列总数少1 for i in range(n): # 0-8 exchange = False for j in range(n-i): # 8-0 if lst[j]>lst[j+1]:  # 前者比后者大则交换 lst[j], lst[j+1] = lst[j+1], lst[j] exchange = True count += 1 if exchange==False:  # 如果遍历结束没有任何交换,说明已经有序 break print("count: %s", count)


lst = list(range(10))
# random.shuffle(lst) #打乱顺序
bubble_sort(lst)
# count: %s 45

bubble_sort_1(lst)
# count: %s 9

print(lst)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/80616627

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。