码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡排序

时间:2020-03-18 15:45:08      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:break   比较   交换   排列   位置   int   结束   list   coding   

冒泡法:属于交换排序,两两比较大小,交换位置,结果分为升序和降序排列。
1、升序:
  n个数从左至右,编号从0开始到n-1,索引0和1的值比较,如果索引0大,则交换两者位置,如果索引1大,则不交换。继续比较索引1和2的值,将大值放在右侧。直至n-2和n-1比较完,第一轮比较完成。第二轮从索引0比较到n-2,因为最右侧n-1位置上已经是最大值了。依次类推,每一轮都会减少最右侧的不参与比较,直至剩下最后2个数比较。
2、降序:
  和升序相反
3、优化:
  冒泡法需要数据一轮轮比较,可以设定一个标记判断此轮是否有数据交换发生,如果没有发生交换,可以结束排序,如果发生交换,继续下一轮排序
  最差的排序情况是,初始顺序与目标顺序完全相反,遍历次数1,...,n-1之和n(n-1)/2
  最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数n-1
4、时间复杂度O(n2)

# -*- coding:utf-8 -*-
# version:python3.7

nums_list = [
    [1,2,3,4,5,6,7,8,9],
    [1,9,8,5,6,7,4,3,2],
    [9,8,7,6,5,4,3,2,1]
]    #建立三组测试数据
nums = nums_list[1]
print(nums)
length = len(nums)

for i in range(length):    #需要九趟
    flag = True            #假定没有发生交换
    for j in range(length-1-i):
        if nums[j] > nums[j+1]:
            nums[j],nums[j+1] = nums[j+1],nums[j]
            flag = False   #发生了交换
    if flag:
        break
print(nums)

执行结果:
[1, 9, 8, 5, 6, 7, 4, 3, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

 







冒泡排序

标签:break   比较   交换   排列   位置   int   结束   list   coding   

原文地址:https://www.cnblogs.com/zyybky/p/12517353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!