快速排序算法Python,python排序算法详解
冒泡排序思想:
列表中每两个相邻的元素,如果前者大于后者,这两个数字将互换。
第一次排序后,最大的数交换到最后一个。
第二次排序后由第二大数字交换的倒数第二个数字。
…
经过n-1次排序后,整个列表元素被排序。
整个过程看起来像一个大数逐渐向后移动,整个效果看起来像冒泡,所以叫做冒泡算法动态图:
冒泡排序算法的时间复杂度为O(n2)代码如下:
def bubble_sort(数据):
对于范围内的I(len(datas)-1):
对于范围内的j(len(datas)-I-1):
if datas[j] datas[j 1]:
数据[j],数据[j 1]=数据[j 1],数据[j]
打印(第{i 1}轮排序结果:,数据)
返回数据
if __name__==__main__ :
数据=[10,9,8,7,6,5,4,3,2,1,0]
Datas=bubble_sort(datas)执行结果如下:
第一轮排序结果:[9,8,7,6,5,4,3,2,1,0,10]
第二轮排序结果:[8,7,6,5,4,3,2,1,0,9,10]
第三轮排序结果:[7,6,5,4,3,2,1,0,8,9,10]
第四轮排序结果:[6,5,4,3,2,1,0,7,8,9,10]
第五轮排序结果:[5,4,3,2,1,0,6,7,8,9,10]
第六轮排序结果:[4,3,2,1,0,5,6,7,8,9,10]
第七轮排序结果:[3,2,1,0,4,5,6,7,8,9,10]
第八轮排序结果:[2,1,0,3,4,5,6,7,8,9,10]
第九轮排序结果:[1,0,2,3,4,5,6,7,8,9,10]
第10轮排序结果:【0,1,2,3,4,5,6,7,8,9,10】以上例子是最坏的情况。我们来测试一下最好的情况:def bubble_sort(datas):
对于范围内的I(len(datas)-1):
对于范围内的j(len(datas)-I-1):
if datas[j] datas[j 1]:
数据[j],数据[j 1]=数据[j 1],数据[j]
打印(第{i 1}轮排序结果:,数据)
返回数据
if __name__==__main__ :
数据=[0,1,2,3,4,5,6,7,8,9,10]
数据集=bubble _ sort(数据集)的结果如下:发现在最好的情况下,这里还有10个循环。
第一轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第二轮排序的结果:[0,1,2,3,4,5,6,7,8,9,10]
第三轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第四轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第五轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第六轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第7轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第八轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第9轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
第10轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]以下是对上述冒泡方法的一点优化,即检测到排序后,停止def bubble_sort(datas)的连续比较:
对于范围内的I(len(datas)-1):
has_exchange=False
对于范围内的j(len(datas)-I-1):
if datas[j] datas[j 1]:
has_exchange=True
数据[j],数据[j 1]=数据[j 1],数据[j]
打印(第{i 1}轮排序结果:,数据)
如果没有已经交换:
破裂
返回数据
if __name__==__main__ :
数据=[0,1,2,3,4,5,6,7,8,9,10]
Datas=bubble_sort(datas)执行结果如下:此时,已经完成。最好的情况下,只需要一轮比较,也就是一轮比较之后,发现顺序已经排好了,于是我们停止吃饭,继续比较。
第一轮排序结果:[0,1,2,3,4,5,6,7,8,9,10]
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。