算法导论的快速排序还和一般书上的快速排序是有点不一样的。
当然书习题也给出了一般快速排序的方法,其分区函数学名叫Hoare partition。
书本介绍的排序可以用图看的很清晰:
然后配合C++程序,就不需要废话就能明白了:
//C++'s array range should be [low, up], the same as [low, up+1)
int partition(vector<int> &vi, int low, int up)
{
int pivot = vi[up];
int i = low-1;
for (int j = low; j < up; j++)
{
if(vi[j] <= pivot)
{
i++;
swap(vi[i], vi[j]);
}
}
swap(vi[i+1], vi[up]);
return i+1;
}
他的quick sort程序也很明了,值得注意到的地方就是,mid是已经到了最终排序位置的了,所以,不需要递归考虑这个位置了。
//C++'s array range should be [low, up], the same as [low, up+1)
void quickSort(vector<int> &vi, int low, int up)
{
if(low < up)
{
int mid = partition(vi, low, up);
//Watch out! The mid position is on the place, so we don't need to consider it again.
//That's why below is mid-1, not mid! Otherwise it will occur overflow error!!!
quickSort(vi, low, mid-1);
quickSort(vi, mid+1, up);
}
}
增加一个adaptor功能函数:
void qSort(vector<int> &vi)
{
quickSort(vi, 0, vi.size()-1);
}
最后是测试主函数:
int main()
{
int a[] = {3,5,7,9,2,3,1,0,7,5,4};
vector<int> va(a, a+11);
cout<<"Before quicksort:\n";
for(auto x:va)
cout<<x<<" ";
cout<<endl;
qSort(va);
cout<<"After quicksort:\n";
for(auto x:va)
cout<<x<<" ";
cout<<endl;
system("pause");
return 0;
}
结果:
分享到:
相关推荐
CUDA-quicksort 是一种基于 GPU 的快速排序算法实现。 CUDA-quicksort 旨在利用现代 NVIDIA GPU 的计算能力。 “文献中介绍了两种基于 GPU 的快速排序实现:GPU 快速排序,一种计算统一设备架构 (CUDA) 迭代实现,...
北大POJ2299-Ultra-QuickSort 解题报告+AC代码
PHP_基于php实现的快速排序算法_QuickSort
请参考算法导论第三版英文版Introduction to Algorithms 3rd Edition,本程序为第一章到第八章重要排序等算法的c/c++实现。IDE环境为vc++ 6.0。函数名称与算法导论原文类似。 主要包括: 直接选择排序 归并排序 堆...
QuickSort快速排序的实现 [Qsort类] 使用C++模版,可实现自定义类型的排序方式 同时通过折半查找检索元素 附带控制台演示 欢迎指正和建议 程序详细描述可见:...
中文名: 算法导论 原名: Introduction to Algorithms 作者: Thomas H. Cormen Ronald L. Rivest Charles E. Leiserson Clifford Stein 资源格式: PDF 版本: 文字版 出版社: The MIT Press书号: 978-0262033848发行...
快速排序源代码,采用C++编写,经测试未发现BUG,供大家参考
JDK7的时候内置 的排序算法已经由经典快排变成了Dual-Pivot排序算法。那么Dual-Pivot到底是何方圣神,能 比我们学过的经典快排还要快呢?
用非递归算法实现quicksort快速排序,高效
第七章 快速排序(Quicksort) 第八章 线性时间中的排序(Sorting in Linear Time) 第九章 中值与顺序统计(Medians and Order Statistics) 第三部分(Part III) 数据结构(Data Structures) 第十章 ...
第七章快速排序(Quicksort) 第八章 线性时间中的排序(Sorting in Linear Time) 第九章 中值与顺序统计(Medians and Order Statistics) 第三部分(Part III) 数据结构(Data Structures) 第十章 基本的...
runoob-algorithm-QuickSort2Ways.zip
算法导论版的快速排序的完整实现。C语言版。免积分送给需要的朋友。
排序算法 排序算法_基于C语言实现的排序算法之QuickSort实现
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
前端大厂最新面试题-quickSort
算法导论英文版,非图片版。 I Foundations Introduction 3 1 The Role of Algorithms in Computing 5 1.1 Algorithms 5 1.2 Algorithms as a technology 11 2 Getting Started 16 2.1 Insertion sort 16 2.2 ...
快速排序算法C语言实现,快排序算法QuickSort.cpp
QuickSort-QuickSort
主要运用合并排序合的过程,在合的过程中,判断左边是否大于右边,如果是的话,就表示有一个你序对,但是合并排序当判断左边大于右边的时候,右边的值会马上被抽出来,所以如果左边还有比右边大的数的话就判断不了了...