快速排序算法Python,python排序算法详解

  快速排序算法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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: