快速排序(Quick Sort)小结
来源:互联网 发布:网络控制系统 编辑:程序博客网 时间:2024/06/06 17:15
什么是快速排序?
简单概括,快速排序是每次选择一个主元(pivot element),以主元为参考,将序列分成两拨(一拨大于,一拨小于等于),并将主元放置到其正确的位置上,这就是快速排序。
优点:
(1)虽然最坏情况时间复杂度不算好,但通常却是实际情况中最好的选择,主要原因是:平均性能好,且常数因子小;
(2)原址排序。
效率:(该算法效率依赖于每次选择的主元是否对序列进行了均衡的划分,因为该算法与归并排序类似,利用了分治思想)
(1)如果划分平衡(哪怕99:1也不要紧),效率与归并排序一样:;
(2)如果遇到最坏情况,每次都分得一个0数组,此时,快速排序的效率下降到与插入排序差不多,为:。
快速排序的随机化版本:
随机化版本,不用让每次输入的数组都是原数组的一个随机序列,因为决定快速排序的随机性的根本在于主元选择的随机性;在随机化版本中将随机选择数组中的一个元素作为主元,这样来实现随机化。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
伪代码:
//功能:对数组A中的下标范围为p到r的子数组进行快速排序QUICKSORT(A, p, r)1if p < r2q = PARTITION(A, p, r)3QUICKSORT(A, p, q - 1)4QUICKSORT(A, q + 1, r)//功能:将数组A中下标为p到r的子数组进行划分,返回划分点下标PARTITION(A, p, r)1x = A[r]//主元2i = p - 13for j = p to r - 14if A[j] <= x5i += 16exchange A[i] with A[j]7exchange A[i+1] with A[r]8return i + 1C++代码实现:
#include <iostream>#include <vector>using namespace std;int partition(vector<int> &A, int p, int r){ int x = A.at(r); int i = p - 1; for(int j = p ; j < r ; ++j) { if(A.at(j) <= x) { i += 1; int tmp = A.at(i); A.at(i) = A.at(j); A.at(j) = tmp; } } int tmp = A.at(i+1); A.at(i+1) = A.at(r); A.at(r) = tmp; return i+1;}void quickSort(vector<int> &A, int p, int r){ if(p < r) { int q = partition(A, p, r); quickSort(A, p, q - 1); quickSort(A, q + 1, r); }}int main(){ vector<int> A = {2, 8, 7, 1, 3, 5, 6, 4}; cout << "Initial array: "; for(int i = 0 ; i < (int)A.size() ; ++i) { cout << A.at(i) << ", "; } cout << endl; quickSort(A, 0, (int)A.size()-1); cout << "Sorted array: "; for(int i = 0 ; i < (int)A.size() ; ++i) { cout << A.at(i) << ", "; } cout << endl; return 0;}输出结果:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
好了,这篇先到这里。
同志,加油!!!
- 快速排序(Quick Sort)小结
- 快速排序(quick sort)
- 快速排序(quick sort)
- 快速排序(quick sort)
- 快速排序(Quick Sort)
- 快速排序(Quick sort)
- 快速排序(Quick Sort)
- 快速排序(Quick Sort)
- 快速排序(Quick Sort)
- 快速排序(Quick Sort)
- 快速排序(Quick Sort)
- Quick Sort(快速排序)
- 快速排序(quick sort)
- 快速排序(Quick-Sort)
- 快速排序 Quick Sort
- 快速排序(Quick sort)
- quick sort 快速排序
- 快速排序(Quick Sort)
- POJ 1185 炮兵阵地 状态压缩DP
- 05-树9 Huffman Codes (30分)
- Hibernate get()和load()方法
- 算法设计与应用基础:第十三周
- 数据库索引简要概述
- 快速排序(Quick Sort)小结
- SURF(Speeded Up Robust Features)算法原理
- js 常见的日期时间
- Ubuntu下 ssh : connect to host localhost port 22:Connection refused
- EasyPusher如何推送纯音频RTSP流媒体数据
- hive全套安装过程,通吃环境。
- 动态规划-硬币问题
- arm 反汇编
- windows下C语言实现<读取>和<写入> *.ini文件。