`
hideto
  • 浏览: 2678100 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CLRS笔记7:快速排序

阅读更多
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)
分享到:
评论

相关推荐

    CLRS-go:算法导论

    1. **排序算法**:包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。Go语言中的切片和并发特性使得这些排序算法的实现既直观又高效。 2. **搜索算法**:如二分查找、广度优先搜索(BFS)和深度优先...

    CLRS(Introduction.to.Algorithms.Second.Edition)

    1. 分治法:将大问题分解为小问题,分别解决后再合并结果,如快速排序、归并排序。 2. 动态规划:通过构建子问题的最优解来得出原问题的最优解,如背包问题、最长公共子序列。 3. 贪心算法:每次选择当前最优解,...

    leetcodeidea-LeetCode-CLRS-Python:最后,要拿LeetCode

    CLRS 最后,要拿 LeetCode,Python 可以让你专注于想法,而 CLRS 真的有点乏味,所以每当你读完时,你就会感到很高兴,因为你可以做 LeetCode。 :books: :open_book: :pencil: :notebook: :hamburger: :spaghetti: :...

    clrs_introductionAlgo:基于clrs教科书的算法基础知识练习

    CLRS教材练习算法关于该项目重点在于通过在代码中实现对基本和高级数据结构及算法的掌握。 这主要是在Python中完成的。促成主题分叉项目创建功能分支( git checkout -b feature/AmazingFeature ) 提交更改( git ...

    clrs-notes-solutions, 算法导论,第3版,学习笔记,习题答案.zip

    1. **基础算法**:排序(如冒泡排序、插入排序、快速排序、归并排序等)、搜索(如二分查找、广度优先搜索、深度优先搜索等)。 2. **数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL树和红黑树)、图...

    CLRS in C++ .zip

    2. **排序与搜索算法**:快速排序、归并排序、堆排序、插入排序、选择排序、冒泡排序、二分查找、哈希表查找等。C++中,`std::sort`函数提供了排序功能,而`std::lower_bound`和`std::upper_bound`则用于区间查找。 ...

    CLRS:CLRS 代码

    1. **排序算法**:如快速排序(Quicksort)、归并排序(Merge Sort)、堆排序(Heap Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)等。这些算法在处理大量数据时非常关键,它们的不同特性决定了...

    CLRS英文第二版

    CLRS英文第二版 .

    book_CLRS:资源库和个人指南| CLRS

    一个个人帮助页面,用于准备数据结构和算法,重点是CLRS书籍... /src目录是添加各种算法的实现的位置。 该README.md文件用于列出数据结构和算法,而不一定来自本书。 快速浏览 目录 Sl。 话题 1。 :check_box_...

    clrs:CLRS算法的实现

    1. **排序算法**:CLRS中介绍了多种排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。Python中的`sorted()`函数和`list.sort()`方法可以轻松实现这些排序,但理解它们的内部工作原理对于...

    CLRS Problems 15-5 Viterbi algorithm

    - **路径追踪**:\( 5.=4a7:587:?fs!,8* \)这样的表达式用于计算从初始状态到当前状态的最优路径。 #### 示例分析 题目描述中提供了一个具体的示例,包括了一串字符序列,例如\( a b c b b a a \)等。这些字符...

    算法导论的习题解答和教师手册(手册)Instructor's Manual of CLRS

    - **第7章:快速排序** - 深入分析快速排序算法,并讨论其在不同场景下的应用。 - **第8章:线性时间排序** - 探讨几种可以在线性时间内完成排序的算法,如计数排序等。 - **第9章:中位数与序统计** - 讨论如何有效...

    CLRS算法导论答案

    大名鼎鼎的 CLRS Algorithm Introduction 算法导论 课后大部分的题目解答

    CLRS算法的实现_Python_C_下载.zip

    常见的算法类型包括排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序等)、查找(如二分查找、哈希查找等)、图算法(如Dijkstra最短路径算法、Floyd-Warshall所有最短路径算法、Prim最小生成树算法等)、...

    Instructor's Manual for CLRS(《算法导论》教师手册)

    第7章:快速排序 - **讲义**:阐述快速排序的基本思想、分区过程及其优化方案。 - **解答**:对比不同排序算法的性能差异,提供快速排序的实际应用场景。 ##### 7. 第8章:线性时间排序 - **讲义**:介绍几种可以...

    CLRS:算法导论学习集

    1. **排序与搜索**:如冒泡排序、插入排序、选择排序、快速排序、归并排序、二分查找等,这些都是基础且实用的算法。 2. **图算法**:包括Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法、Kruskal...

    CLRS:CLRS示例代码的C ++实现和研究目的。 不涉及编码的练习将不会共享

    在这个CLRS的C++实现中,我们可能会看到诸如排序算法(如快速排序、归并排序)、查找算法(如二分查找、哈希查找)、图算法(如Dijkstra最短路径、Floyd-Warshall所有对最短路径)、动态规划问题、递归算法、贪婪...

    算法导论的习题解答和教师手册(解答)Solutions for CLRS

    - \(n\lg{n}\):线性对数级别,归并排序、快速排序等高级排序算法的时间复杂度。 - \(n^2\):二次级别,适用于简单的排序算法如冒泡排序、插入排序。 - \(n^3\):三次级别,通常在矩阵乘法等算法中出现。 - \(2^n\)...

    算法导论 CLRS Introduction To Algorithms chm

    算法导论 CLRS Mit Press - Introduction To Algorithms 2Nd Edition Incl Exercises Edition.chm

Global site tag (gtag.js) - Google Analytics