zoukankan      html  css  js  c++  java
  • 查找和排序-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]

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

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






  • 相关阅读:
    前缀和-长度最小的子数组
    找到字符串中所有的字母异位词
    区间列表的交集
    比较含退格的字符串
    [转] ios数组基本用法和排序
    [转] 【iOS基础知识】之判断NSString是否为整数、浮点数
    解决resignFirstResponder或者endEditing无效的办法
    iOS 根据文字字数动态确定Label宽高
    [转] iOS开发-搜索栏UISearchBar和UISearchController
    UIActionSheet的最后一项点击失效
  • 原文地址:https://www.cnblogs.com/sunny666/p/10761529.html
Copyright © 2011-2022 走看看