【数据结构&&算法系列】快速排序简单介绍及实现

来源:互联网 发布:linux 映射内网端口 编辑:程序博客网 时间:2024/05/27 20:24

快速排序就像它的名字一样,速度非常快。

快速排序虽然最坏情况时间复杂度为o(n*n),但它通常是实际排序应用中最好的选择,因为它的平均性能很好。

它的期望时间复杂度为o(n*logn),而且o(n*logn)中隐含的常数因子非常小。

另外它还能够进行原址排序,甚至在虚存环境中也能很好地工作。


快排的三步分治过程为分解、解决、合并。因为子数组都是原址排序的,所以不需要合并操作。


快排的关键步骤是分解,分解的主要目的是把数组分为不大于主元的一部分和不小于主元的一部分。


下面是实现代码,其中partition中的 i 用于确定不大于主元的元素的位置,而 j 则用于遍历子数组。



#coding:utf-8def quick_sort(arr,p,r):if p<r:q = partition(arr,p,r)quick_sort(arr,p,q-1)quick_sort(arr,q,r)def partition(arr,p,r):key = arr[r]i = p-1for j in range(p,r):if arr[j]<key:i += 1arr[i],arr[j] = arr[j],arr[i]# show_arr(arr) #打印中间过程arr[i+1],arr[r] = arr[r],arr[i+1]return i+1def show_arr(arr):      print "[", ", ".join([str(x) for x in arr]), "]"  if __name__ == "__main__":arr = [2,8,7,1,3,5,6,4]quick_sort(arr,0,len(arr)-1)show_arr(arr)


0 0
原创粉丝点击