python冒泡排序

冒泡排序介绍

冒泡排序是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,把待排序序列中最小的元素不断冒泡到最前面,然后重复这个过程,最终得到一个有序的序列。

冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

下面我们来看一下Python实现冒泡排序的方法。

Python实现冒泡排序

Python实现冒泡排序非常简单,只需要两个嵌套循环和一个中间变量即可。

代码实现

def bubble_sort(arr):

n = len(arr)

for i in range(n):

for j in range(0, n-i-1):

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]

return arr

在上面的代码中,我们定义了一个bubble_sort函数,该函数接收一个列表作为参数,返回排序后的列表。

通过两个嵌套循环来实现冒泡排序,外层循环控制排序轮数,内层循环控制每一轮排序过程中相邻元素的比较和交换。

时间复杂度分析:

最好的情况下,列表已经是有序的,只需要进行一次外层循环和一次内层循环,所以时间复杂度为O(n)。

最坏的情况下,列表是逆序的,需要进行n-1轮循环,每一轮内层循环中需要进行n-i-1次比较和交换,所以时间复杂度为O(n^2)。

平均情况下,需要进行n/2轮循环,每一轮内层循环中需要进行n/2次比较和交换,所以时间复杂度为O(n^2)。

示例演示

为了更加直观地了解冒泡排序的过程,我们可以使用Python的turtle库来实现可视化演示。

代码实现

import turtle

import random

def bubble_sort(arr):

n = len(arr)

for i in range(n):

for j in range(0, n-i-1):

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]

draw(arr, j, j+1)

def draw(arr, index1, index2):

turtle.clear()

turtle.penup()

turtle.goto(-300, 0)

turtle.pendown()

for i in range(len(arr)):

turtle.goto(-300 + 30*i, arr[i]*10)

if i == index1 or i == index2:

turtle.dot(30, 'red')

else:

turtle.dot(30, 'black')

if __name__ == '__main__':

# 生成随机列表

arr = [random.randint(1, 20) for i in range(10)]

turtle.speed(0)

turtle.hideturtle()

draw(arr, -1, -1)

turtle.mainloop()

bubble_sort(arr)

turtle.done()

在上面的代码中,我们使用turtle库来绘制可视化效果。

首先定义了一个draw函数,该函数接收三个参数:列表arr和需要高亮显示的两个元素的下标index1和index2。

然后在bubble_sort函数中在每次比较和交换之后调用draw函数来绘制可视化效果。

最后在主程序中生成随机列表,绘制初始状态的可视化效果,并调用bubble_sort函数来进行排序,最后绘制排序完成后的可视化效果。

总结

冒泡排序虽然时间复杂度较高,但它简单易懂,容易实现,适用于对小规模数据进行排序。当面对大规模数据时,可以选择其他更为高效的排序算法,如快速排序、归并排序等。

后端开发标签