• 查找和排序-3.冒泡排序


    冒泡排序

    它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
    这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
     
    代码实现:
    def bubble_sort(li):
    for i in range(len(li)-1):
    for j in range(len(li)-i-1): #j=0时 就是列表第一个
    #-1是因为用li[j+1]作比较的 所以-
    if li[j] > li[j+1] : #这一步是只能排序后一个比前一个大比一定比前2个大
    li[j],li[j+1] = li[j+1],li[j] #每一次迭代都是将最小的往前移动一位

    li = [random.randint(0,8) for i in range(6)]
    print(li)
    bubble_sort(li)
    print(li)


    因为是做算法,本着能省则省,能快则快原则,以上代码可以有优化

    def bubble_sort1(li):
    for i in range(len(li)-1):
    exchange = 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=True
    print(li)
    if not exchange: #本次循环没有调整一个位置 说明一切排序已经完成
    return
    li = [9,8,7,1,2,3,4,5,6]
    bubble_sort1(li)
    输出:

      [8, 7, 1, 2, 3, 4, 5, 6, 9]
      [7, 1, 2, 3, 4, 5, 6, 8, 9]
      [1, 2, 3, 4, 5, 6, 7, 8, 9]
      [1, 2, 3, 4, 5, 6, 7, 8, 9]

    从这个优化的算法可以看出,冒泡排序如果两个比较的比较的元素符合排序规则是不需要交换的,
    所以是稳定的排序方式
    并最乐观的时候,有排序好的可以直接输出

    综上,因此冒泡排序总的平均时间复杂度为 






  • 相关阅读:
    使用匿名内部类和lamda的方式创建线程
    匿名内部类与lamda表达式
    机器学习中数据量多少与模型过拟合欠拟合之间的关系
    设计模式和java实现
    八大排序算法汇总——java实现
    java多线程并发编程中的锁
    java NIO
    网络通信引擎ICE的使用
    机器学习算法汇总大梳理
    处理样本不均衡数据
  • 原文地址:https://www.cnblogs.com/sunny666/p/10761529.html
Copyright © 2020-2023  润新知