[排序] 冒泡排序(Python)

来源:互联网 发布:ip地址修改软件 编辑:程序博客网 时间:2024/05/02 01:55

思想

依次比较相邻两元素的大小,顺序与要求的不一致就交换。这样会把待排序序列中的最大(最小)元素不断”浮”到最右端,最终完成升序或降序排列。

示例

对序列 [2, 4, 1, 3, 6, 5] 按升序排列(只记录有交换发生的循环)。

第一次循环:
[2, 4, 1, 3, 6, 5] –> [2, 1, 4, 3, 6, 5] –> [2, 1, 3, 4, 6, 5] –> [2, 1, 3, 4, 5, 6]

第二次循环:
[2, 1, 3, 4, 5, 6] –> [1, 2, 3, 4, 5, 6]

代码

class Solution:    # @param {int[]} A an integer array    # @return nothing    def sortIntegers(self, A):        # 优化循环终止条件,可减少循环次数,当一次循环中没有交换发生,则已经完全有序        f = 1        for i in range(len(A) - 1):            for j in range(len(A) - 1 - i):                if A[j] > A[j + 1]:                    self.swap(A, j, j + 1)                    f = 0            if f:                break    def swap(self, A, i, j):        tmp = A[j]        A[j] = A[i]        A[i] = tmp

时间复杂度

最好时间复杂度O(n),最差时间复杂度O(n2),平均时间复杂度O(n2)

原创粉丝点击