zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序(Bubble Sort)重复地遍历要排序的数列,一次比较两个元素,如果它们顺序错误就交换过来。遍历数列的工作是重复地进行直到没有需要交换,也就是该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

    冒泡排序算法运作如下

    1)比较相邻的元素。如果第一个比第二个大(升序),就交换它们两个。

    2)对每一对相邻元素作同样的工作,从开始第一队到结尾的最后一对。这步作完后,最后的元素会是最大的数。

    3)针对所有的元素重复以上步骤,除了最后一个。

    4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

    冒泡排序的分析:

    每次对比次数如下:

    时间复杂度:

    1)最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)

    2)最坏时间复杂度O(n2)

    3)稳定性:稳定

    # -*- coding: utf-8 -*-
    def bubble_sort(alist):
    for j in range(len(alist) - 1):
    count =0
    for i in range(len(alist) - 1 - j):
    if alist[i] > alist[i + 1]:
    alist[i], alist[i + 1] = alist[i + 1], alist[i]
    count += 1
    if 0 ==count:
    return
    # i 0~n-2 range(0,n~1) j=0
    # i 0~n-3 range(0,n-1-1) j=1
    # i 0~n-4 range(0,n-1-2) j=2
    # j=n i range(0,n-1-j)

    if __name__ == '__main__':
    arrary = [9, 8, 10, 15, 7, 3, 20, 14, 2]
    print(arrary)
    print(len(arrary))
    bubble_sort(arrary)
    print(arrary)

    运行结果:

    [9, 8, 10, 15, 7, 3, 20, 14, 2]
    9
    [2, 3, 7, 8, 9, 10, 14, 15, 20]

    Process finished with exit code 0

  • 相关阅读:
    算法题(1): 如何不用加号,求两整数之和
    使用 SSH key 和 ssh-agent
    数据序列化格式-YAML
    Golang 编码规范
    拦路虎-- vscode 与 golang
    Golang 基础 12 -- 基础小结
    Golang 基础 11 -- 并发 concurrency
    Golang 基础 09 -- 接口 interface
    Golang 基础 10 -- 反射 reflection
    根据第三方提供的图片或pdf的url进行预览
  • 原文地址:https://www.cnblogs.com/bashliuhe/p/13205984.html
Copyright © 2011-2022 走看看