当前位置: 首页 > 后端技术 > Python

Python实现·十大排序算法:冒泡排序

时间:2023-03-26 16:33:24 Python

介绍冒泡排序是经典的排序算法之一,属于交换排序的一种。基本的排序思路是:从头开始两两比较元素,较大的元素往上,这样遍历一轮后,直接筛选出最大的元素。然后重复上面的操作,完成第二大元素的冒泡。依此类推,直到所有元素都排序完毕。算法实现步骤比较相邻元素,如果第一个大于第二个,则将两者交换(确定排序规则:从小到大或从大到小);对每对相邻元素执行相同的操作,从开头的第一对到结尾的最后一对;对除最后一个元素之外的所有元素重复上述步骤;重复步骤1~3,直到没有一对元素可以比较,则排序完成。Python代码实现#bubble_sort代码实现fromtypingimportList#冒泡排序defbubble_sort(arr:List[int]):"""冒泡排序(Bubblesort):paramarr:待排序列表,这里限制排序的类型isint:return:冒泡排序就是就地排序(in-place)"""length=len(arr)iflength<=1:returnforiinrange(length):is_made_swap=False##设置标志位,如果已经排序,直接breakforjinrange(length-i-1):ifarr[j]>arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]is_made_swap=Trueifnotis_made_swap:break#testdataif__name__=='__main__':importrandomrandom.seed(54)arr=[random.randint(0,100)for_inrange(10)]print("原始数据:",arr)bubble_sort(arr)print("冒泡排序结果:",arr)#输出原始数据:[17,56,71,38,61,62,48,28,57,42]冒泡排序结果:[17,28,38,42,48,56,57,61,62,71]动画演示算法分析时间复杂度如果数据从开始,那么只需要一趟排序就完成了。所需比较次数C和记录移动次数M均达到最小值,即:$$C_{\min}=n-1;M_{\min}=0$$因此,冒泡的最佳时间复杂度排序是O(n)。如果一开始数据是倒序的,则需要进行n-1次排序,每遍需要进行n-i次比较,每次比较都要将记录移动3次才能到达交换记录位置。此时比较和移动的次数达到最大值:$$C_{\max}=\frac{n\left(n-1\right)}{2}=o\left(n^2\right)$$$$M_{\max}=\frac{3n\left(n-1\right)}{2}=o\left(n^2\right)$$空间复杂度空间复杂度是当exchangingelements临时变量占用的内存空间。最优空间复杂度是起始元素的顺序已经排好,空间复杂度为0;空间复杂度最差的是起始元素倒序排列,空间复杂度为:O(n);平均空间复杂度为:O(1);稳定性是由于在比较过程中,当两个相同大小的元素相邻时,它们只是变大或变小,而不会交换位置。而当两个相等的元素距离较远时,只会交换到相邻的位置。也就是说,在排序过程中,相等元素的位置和上下文不会发生变化,所以算法是稳定的。综合评价时间复杂度(平均)时间复杂度(最好)时间复杂度(最差)空间复杂度排序稳定性$O(n^2)$$O(n)$$O(n^2)$$O(1)$in-place稳步联系我们个人博客网站:http://www.bling2.cn/Github地址:https://github.com/lb971216008/Use-Python-to-Achieve知乎专栏:https://zhuanlan.zhihu。com/使用-Python-to-Achieve