Quick Sort原理很简单,典型的分治法:
1,分
数组a一分为二,比元素x小或等的子数组和比元素x大的数组
2,递归
子数组递归分
3,合
子数组分好以后按序合并即可
用Ruby和Erlang实现Quick Sort实在简洁:
ruby:
def quick_sort(a)
(x=a.pop) ? quick_sort(a.select{|i| i <= x}) + [x] + quick_sort(a.select{|i| i > x}) : []
end
erlang:
quick_sort([]) ->
[];
quick_sort([H | T]) ->
quick_sort([ X || X <- T, X < H ]) ++ [H] ++ quick_sort([ X || X <- T, X >= H ]).
最坏时间复杂度为O(n^2):
如果每次分的时候选取的元素都是最小或最大值,那么分完以后就会出现一边为空一边为除了选取元素外所有元素的数组,复杂度为1+2+...+n = O(n^2)
最好时间复杂度为Θ(nlogn):
如果每次分的时候选取的元素都是中间值,那么分完以后两边的数组size一样大:
T(n) = 2T(n/2) + Θ(n) = Θ(nlogn)
分享到:
相关推荐
1. **基础算法**:排序(如冒泡排序、插入排序、快速排序、归并排序等)、搜索(如二分查找、广度优先搜索、深度优先搜索等)。 2. **数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL树和红黑树)、图...
- **第7章:快速排序** - 深入分析快速排序算法,并讨论其在不同场景下的应用。 - **第8章:线性时间排序** - 探讨几种可以在线性时间内完成排序的算法,如计数排序等。 - **第9章:中位数与序统计** - 讨论如何有效...
1. **排序与搜索**:如冒泡排序、插入排序、选择排序、快速排序、归并排序、二分查找等,这些都是基础且实用的算法。 2. **图算法**:包括Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法、Kruskal...
笔记本摘要我基础1算法在计算中的作用2入门3功能成长4分而治之5概率分析和随机算法II排序和订单统计6堆排序7快速排序8线性时间排序9中位数和订单统计III数据结构10种基本数据结构11哈希表12个二叉搜索树13棵红黑树14...
- **主题讲解**:从堆排序到快速排序,再到线性时间排序和中位数及顺序统计量,这一系列章节的讲座笔记全面覆盖了各种排序算法的原理和应用场景。 - **解决方案**:课后解答不仅提供了排序算法的实现细节,还深入...
其中,排序算法如快速排序、归并排序、堆排序,搜索算法如二分查找、深度优先搜索、广度优先搜索等,都是编程基础中的重要部分。在图算法部分,书中详细讲解了最短路径问题(如Dijkstra算法和Floyd-Warshall算法)...
排序算法部分,书中详细讲解了冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等经典算法,以及各种排序算法的时间复杂度分析。其中,快速排序和归并排序因其高效性和稳定性而被广泛应用。 搜索算法包括...
基础算法包括排序(如冒泡排序、快速排序)、搜索(如二分查找、深度优先搜索)、图论(如最短路径算法、拓扑排序)等。进阶算法则涉及动态规划、回溯、贪心策略等。这些知识点在竞争性编程中至关重要,因为它们能...