用Python排序,用python实现快速排序算法

  用Python排序,用python实现快速排序算法

  作为我们在数据结构面试中经常看到的算法,快速排序对于我们理解和掌握它非常重要。在这里,我将使用一个简单的步骤描述图和代码描述来带您快速浏览。

  快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort)。

  要排序的数据通过一次排序分成两个独立的部分,一部分的所有数据小于另一部分的所有数据。然后用这种方法对两部分数据进行快速排序,整个排序过程可以递归进行,使整个数据成为有序序列。

  步骤为:

  1,从序列中挑选出一个元素,叫做‘pivot’,

  2.对序列重新排序,所有小于基准值的元素放在基准前面,所有大于基准值的元素放在基准后面(同一个数可以在两边)。在这个分区结束后,基准位于系列的中间。这称为分区操作。

  3.递归排序小于参考值的元素子系列和大于参考值的元素子系列。

  随机输入

  defquick_sort(列表,开始,结束):

  ifstartend:

  返回

  #如果前一个值大于后一个值,排序停止,低位指针和高位指针重合。

  低=开始

  高=结束

  middle=list[start]

  #中间是我们一开始设定的基准值,低和高表示指针的位置。

  whilelowhigh:

  while whighandalist[high]=middle :

  高=1

  列表[低]

  while whighandalist[low]=middle :

  低=1

  列表[高]

  #退出循环时,证明低位指针指向的数据大于基准中位,所以将大于中位的数与高位交换。

  列表[低]=中间

  #推出循环后,低和高的位置重合,这个重合的位置就是中间元素应该在的位置。这时中间放在这里,一个大循环结束。

  quick_sort(列表,开始,低位-1)

  quick_sort(列表,低位1,结束)

  list1=[]

  #通过生成随机数来验证我们的排序算法。

  (30):

  list1.append(random.randint(1,300))

  quick_sort(list1,0,len(list1)-1)

  打印(列表1)时间复杂度

  最优时间复杂度:O(nlogn)

  最坏时间复杂度:O(n2)

  稳定性:不稳定

  从一开始就快速排序平均需要O(n log n)时间并不明显。但是观察分区操作并不难。数组的元素将在每个循环中遍历一次,使用的时间为O(n)。在使用组合的版本中,这个操作也是O(n)。

  在最好的情况下,每次运行分区时,我们都会将一个系列分成两个几乎相等的部分。

  这意味着每个递归调用处理一半大小的序列。

  因此,在到达大小为1的序列之前,我们只需要进行log n个嵌套调用。

  这意味着调用树的深度是O(log n)。

  但是,在两个相同层次结构的程序调用中,原始序列的相同部分不会被处理;所以每个层次的程序调用总共只需要O(n)次(每个调用都有一些共同的开销,但是因为每个层次只有O(n)次调用,所以这些都汇总在O(n)系数中)。

  结果是该算法只需要O(n log n)时间。

  更多Python知识,请关注Python视频教程!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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