快速排序
来源:互联网 发布:单片机连接继电器 编辑:程序博客网 时间:2024/05/21 04:50
快速排序是一种分治算法
快速排序是一种原址排序,因此能节省内存
快速排序最坏时间为theta(n^2)
快速排序平均性能非常好(平均情况时间为theta(nlgn),且其中常数因子很小),因此快速排序通常是最好的排序,而且快速排序很好地适用于虚拟内存环境
随机化快速排序最坏时间为theta(n^2),随机化算法各元素不相同的情况下,期望时间为O(nlgn)
由于子数组都是原址排序的,因此不需要合并操作,只需要分治法中的分解与求解步骤
快速排序的分解步骤是最关键的步骤;
注意:划分的两个子数组,其中可能存在空数组
quicksort
1. if p < r
2. q = partition(A, p, r)
3. quicksort(A, p, q - 1)
4. quicksort(A, q + 1, r)
数组划分算法 –用于对数组进行原址重排序(只需8步)
partition(A, p, r)
1. x = A[r]
2. i = p - 1
3. for j = p to r-1
4. if A[j] ≤ x
5. i = i + 1;
6. exchange A[i] with A[j]
7. exchange A[i + 1] with A[r]
8. return i + 1
其中x为主元,主元用于划分数组
注意分治法中,A[p..r]也是子数组,而非整个数组
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 排序算法—堆排序
- Spring中加载xml配置文件
- Andrew Moore CMU machine learning Notes(ML part)
- python学习资料大全
- 练习2-1
- 快速排序
- hdu 1875 畅通工程再续(double的prim)
- 使用React+Three.js 封装一个三维地球
- 重新学习Struts
- <Android 基础(零)> Android知识框架梳理
- 什么是嵌入式
- Matlab中如何使函数作为参数传递
- 多态
- 《C#图解教程》第5章 方法 读书笔记