算法-QuickSort
#include <stdlib.h>
#include <iostream>
#include <vector> using namespace std; template <class T>
void print_array(const vector<T> &array)
{
for ( unsigned int i = ; i < array.size() + ; ++i )
{
cout<<array[i-]<<" ";
if ( array[i - ] < )
cout<<" ";
if ( i % == )
cout<<endl;
}
} template <class T>
void shuffling(vector<T> &array)
{
int n = array.size();
for ( int i = ; i < n; ++ i )
{
int r = i == ? : rand() % i;
T temp = array[i];
array[i] = array[r];
array[r] = temp;
} return;
} template <class T>
unsigned int partition(vector<T> &array, unsigned int lo, int unsigned hi)
{
if ( lo == hi ) return lo; unsigned int i = lo;
unsigned int j = hi;
T partition_val = array[lo]; while ( i < j )
{
while ( array[i] <= partition_val )
{
if ( i < hi ) ++i;
else break;
} while ( array[j] > partition_val )
{
if ( j > lo ) --j;
else break;
} if ( i < j )
{
T temp = array[i];
array[i] = array[j];
array[j] = temp;
} } array[lo] = array[j];
array[j] = partition_val; return j;
} template <class T>
void quick_sort(vector<T> &array, unsigned int lo, unsigned int hi)
{
if ( lo >= hi ) return;
int partition_pos = partition(array, lo, hi);
quick_sort(array, lo, partition_pos);
quick_sort(array, partition_pos + , hi); return;
} int main()
{
vector<int> array;
for ( int i = ; i < ; ++i )
array.push_back(i); cout<<"shuffling the array..."<<endl;
shuffling(array); cout<<"the shuffled array: "<<endl;
print_array(array); cout<<"quick sort the array: "<<endl;
quick_sort(array, , array.size() - ); cout<<"array after quick sorted: "<<endl;
print_array(array); return ;
}
输出结果:

算法-QuickSort的更多相关文章
- 快速排序算法(Quicksort)
快速排序算法是对集合中元素进行排序最通用的算法,俗称快排,其算法的时间复杂度为O(nlgn),空间复杂度为O(1). 我们举例来对其算法思路进行理解,譬如数组 A = { 4, 8, 1, 2, 9, ...
- 排序算法——QuickSort、MergeSort、HeapSort(C++实现)
快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...
- 排序算法(1) 快速排序 C++实现
快速排序基本特性 时间复杂度:O(n*lgn) 最坏:O(n^2) 空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(lgn) 不稳定. 关于快速排序的空间复杂度,谢谢@命运他爹 ...
- 我的Java开发学习之旅------>Java经典排序算法之快速排序
一.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod).(1) 分治法的 ...
- peersim中BT网络核心代码解析
首先大概介绍BT网络运行的整体流程: 开始阶段,一个节点加入到网络中,并向tracker节点发送信息,tracker返回若干个邻居的列表 得到列表后,向每个邻居发送bitfiled信息,来获取他们的文 ...
- hadoop2-MapReduce详解
本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...
- pandas-06 Series和Dataframe的排序操作
pandas-06 Series和Dataframe的排序操作 对pandas中的Series和Dataframe进行排序,主要使用sort_values()和sort_index(). DataFr ...
- C++ Templates (Part I 基本概念 The Basics)
C++ 模板 (C++ Templates) 目录 C++ 模板 (C++ Templates) 第一部分 基本概念 (The Basics) 第一部分章节目录 参考资料 第一部分 基本概念 (The ...
- C#高级编程第11版 - 第七章 索引
[1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...
随机推荐
- Freemaker 自定义函数
定义格式如下: <#function name param1 param2 ... paramN> ... <#return returnValue> ... </#fu ...
- Python_Day10_进程、线程、协程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\ ...
- reqwest请求api和约束(转载)
转自:https://www.oschina.net/p/reqwest reqwest 用于浏览器异步HTTP请求.支持xmlHttpRequest, JSONP, CORS, 和 CommonJS ...
- csshover.htc CSS兼容
以下为csshover.htc 内容 <attach event="ondocumentready" handler="parseStylesheets" ...
- Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向
win7外接显示器选择拓展模式后,为什么鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向 打开控制面板-->显示 其他不变的情况下,鼠标拖动上面的两个显示器图标,拉出你希望的方向即可.
- html/css小练习1
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAywAAAFgCAIAAADW6Wr0AAAgAElEQVR4nOzdd1xT5+L48bJlhUAGCY
- JSON的一些细节
这篇JSON的随笔只是为了简单地复习一下学习到的JSON的内容.都是一些很基础的东西.如果你不小心看到了这篇文,那就一起复习吧.(。・∀・)ノ JSON不支持JavaScript中的undefined ...
- SQL 存储过程 解析XML
第一种说明: 我看过这样一篇文章,如下 在SQL Server2005中,微软延续了 2000中一个特性(即支持XML类型的数据),并加强了对XML 数据列.XML变量以及XML索引的支持 ...
- DotnetBar在VS2010工具箱中不显示问题
请参考:http://blog.csdn.net/yanbo710148546/article/details/7862819
- Web自动化基础(一)使用Selenium定位元素
什么是元素?我们知道网页上有什么内容显示出来,比如一个按钮,一个输入框,一张图片,都可以理解成元素,这些元素是由html代码构成的,比如图片可以用<img>标签来展示,一个输入框可以用&l ...