【数据结构&&算法系列】快速排序简单介绍及实现
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)
快速排序虽然最坏情况时间复杂度为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)
相关文章推荐
- 【数据结构&&算法系列】堆排序简单介绍及其实现
- 【数据结构&&算法系列】插入排序简单介绍及python代码
- 【数据结构&&算法系列】并查集简单介绍
- 【数据结构&&算法系列】KMP算法介绍及实现(c++ && java)
- 【数据结构&&算法系列】归并排序简单介绍及python代码
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
- 【转载】【数据结构&&算法系列】KMP算法介绍及实现(c++ && java)
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
- [置顶] 斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌
- C 语言 简单桶排序 算法&实现
- 【数据结构&&算法系列】最大子数组
- 数据结构笔记-快速排序简单实现
- SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
- [李景山php]算法系列|php 实现快速排序
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- 每天一个数据结构——三种简单排序算法及Java实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现&&相关面试题介绍