您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法(六):快速排序的python实现

2019-03-12 21:53 260 查看

快速排序

快速排序又称为划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
具体实现步骤:

  • 从数列中挑出一个元素,称为"基准"(pivot)。
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

快速排序的python实现:

def quick_sort(alist,first,last):
'''快速排序(升序)'''
if first >= last:
return
mid_value = alist[first ]
low = first #注意low和high是下标。
high = last
while low<high:
#让high游标向左移动
#这个等号表示把相等的情况放在high这边
while low < high and alist[high]>=mid_value:
high-=1
alist[low] = alist[high]
#让low游标向右移动
while low < high and alist[low]<mid_value:
low+=1
alist[high] = alist[low]
alist[low] = mid_value
quick_sort(alist,first,low-1)#递归作用在alist上
quick_sort(alist,low+1,last)
if __name__ == "__main__":
li = [54,26,93,17,77,31,44,55,20]
print(li)
quick_sort(li,0,len(li)-1)
print(li)

输出:

[54, 26, 93, 17, 77, 31, 44, 55, 20]
[17, 20, 26, 31, 44, 54, 55, 77, 93]

时间复杂度分析:

  • 最优时间复杂度:O(nlogn)
  • 最坏时间复杂度:O(n2) (恰好每次只分给某一边一个数)
  • 稳定性:不稳定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: