📜  时间复杂度冒泡排序 (1)

📅  最后修改于: 2023-12-03 14:55:09.794000             🧑  作者: Mango

冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思路是从头到尾依次比较相邻的两个元素,如果它们的顺序错误就交换它们,这样一趟比较下来,最大的元素就被交换到了最后面,然后再从头开始比较,直到所有的元素都按照从小到大(或从大到小)的顺序排列好为止。

时间复杂度

冒泡排序的时间复杂度为 $O(n^2)$。整个算法需要进行 $n(n-1)/2$ 次比较和交换操作,因此时间复杂度上界为 $O(n^2)$。

在排序过程中,最好的情况下,只需要进行 $n$ 次比较和 $0$ 次交换,此时时间复杂度为 $O(n)$,但是最坏的情况下,需要进行 $n(n-1)/2$ 次比较和交换,此时时间复杂度为 $O(n^2)$。

可以使用一些优化技巧来提高冒泡排序的效率,如设置一个布尔变量记录是否有交换发生,若某一趟比较中没有发生交换,则说明已经排好序了,此时可以直接退出循环,从而避免不必要的比较。

代码实现

以下为冒泡排序的 Python 代码实现:

def bubble_sort(array):
    n = len(array)
    for i in range(n):
        # 设置一个布尔变量记录是否有交换发生
        flag = False
        for j in range(n-i-1):
            if array[j] > array[j+1]:
                # 交换相邻两个元素的值
                array[j], array[j+1] = array[j+1], array[j]
                flag = True
        # 若某一趟比较中没有发生交换,则说明已经排好序了
        if not flag:
            break
    return array

其中,array 为待排序的数组,n 表示数组的长度。第一层循环遍历整个数组,第二层循环比较相邻两个元素的大小,并根据需要交换它们的顺序。最后,若某一趟比较中没有发生交换,则说明已经排好序了,这时可以直接退出循环,从而避免不必要的比较。