排序算法

1.冒泡排序

算法描述

  • 列表每相邻的两个数比较,如果前面比后面的大,则交换两个数
  • 一趟排序完成后,则无序区减少一个数,有序区增加一个数

算法示意图

                              《排序算法》        《排序算法》    《排序算法》  《排序算法》    《排序算法》

                             《排序算法》                        《排序算法》      《排序算法》      《排序算法》

代码实现

import copy
# 冒泡排序 时间复杂度o(n^2)
# 列表每相邻的两个数比较,如果前面比后面的大,则交换两个数
# 一趟排序完成后,则无序区减少一个数,有序区增加一个数
def bubble_sort(li):
    for i in range(len(li)-1): # 需要n-1趟
        for j in range(len(li)-i-1): # 无序区为len(li)-i-1
            # 每趟把最大的元素放到最后
            if li[j] > li[j+1]: # 如果从大到小排序改为<
                li[j], li[j+1] = li[j+1], li[j]
        print('第%s趟冒泡后,排序为'%(i+1), li)

# 优化后冒泡排序
# 当对无序区冒泡排序完一趟后,如果没有发生交换,说明无序区是排序好的
def bubble_sort_optimize(li):
    for i in range(len(li)-1):
        exchange_flag = False # 记录交换标志
        for j in range(len(li)-i-1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                exchange_flag = True
        if not exchange_flag:
            return
        print('第%s趟冒泡后,排序为' %(i+1), li)

li=[9,8,7,1,2,3]
li2=copy.deepcopy(li)
print('---普通冒泡-----')
print(li)
bubble_sort(li)
print('---优化冒泡-----')
print(li2)
bubble_sort_optimize(li2)

>>>>>>输出结果

---普通冒泡-----
[9, 8, 7, 1, 2, 3]
第1趟冒泡后,排序为 [8, 7, 1, 2, 3, 9]
第2趟冒泡后,排序为 [7, 1, 2, 3, 8, 9]
第3趟冒泡后,排序为 [1, 2, 3, 7, 8, 9]
第4趟冒泡后,排序为 [1, 2, 3, 7, 8, 9]
第5趟冒泡后,排序为 [1, 2, 3, 7, 8, 9]
---优化冒泡-----
[9, 8, 7, 1, 2, 3]
第1趟冒泡后,排序为 [8, 7, 1, 2, 3, 9]
第2趟冒泡后,排序为 [7, 1, 2, 3, 8, 9]
第3趟冒泡后,排序为 [1, 2, 3, 7, 8, 9]

 

    原文作者:一只小小的寄居蟹
    原文地址: https://www.cnblogs.com/xiao-apple36/articles/8460552.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞