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

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

2014-04-23 17:27 691 查看
快速排序就像它的名字一样,速度非常快。

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

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

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

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

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

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

#coding:utf-8

def 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-1
for j in range(p,r):
if arr[j]<key:
i += 1
arr[i],arr[j] = arr[j],arr[i]
# show_arr(arr) #打印中间过程
arr[i+1],arr[r] = arr[r],arr[i+1]
return i+1

def 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐