算法-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 ...
随机推荐
- python 01
注意Python 是大小写敏感的,即print 与Print 不一样 推荐编辑器 vim & sublime 如何运行 #!/usr/bin/python#Filename: hellowor ...
- centos7 安装redis 开机启动
redis 下载 https://redis.io/download wget http://download.redis.io/releases/redis-3.2.6.tar.gz 解压缩 .ta ...
- JQuery_表单选择器
表单作为HTML 中一种特殊的元素,操作方法较为多样性和特殊性 开发者不但可以使用之前的常规选择器或过滤器,也可以使用jQuery 为表单专门提供的选择器和过滤器来准确的定位表单元素. 一.常规选择器 ...
- Spring-boot-admin功能说明
http://blog.csdn.net/xingfulangren/article/details/52304413 **************************************** ...
- html小知识点汇总(浏览器导航上显示图标、div无高度时试着清除浮动、文字环绕图片、字体加粗、div按百分比分、已有的不合适的class,针对特定的标签进行修改)
1.新点击的网页,在浏览器导航上显示图标: 像这种效果: <head> <meta charset="UTF-8"> <meta name=" ...
- AES,RSA对称加密和非对称加密
1.关于RSA加密机制:是非对称加密方式,两个钥,公钥和私钥,公钥用于加密数据,可以分享给其他用户,私钥可以用于解密用公钥加密的数据,关于安全问题是公钥泄露不会影响安全问题,公钥与私钥是一一对应的关系 ...
- CSS3--overflow属性
overflow:当内容溢出元素框时发生的事情: overflow:默认,内容不会裁剪,会呈现在元素框之外: overflow:hidden:内容会被裁剪,并且其余部分是不可见的(清除浮动) over ...
- python中的动态变量
def make_name(): names = locals() for i in range(1, 10): names['t%s' % i] = i print names['t%s' % i]
- Windows 2003 EE升级服务错误号:0x8DDD0018 解决办法
错误提示: [错误号: 0x8DDD0018] 此站点无法继续,因为这些 Windows 服务中的一个或多个没有运行: “自动更新”功能(允许站点查找.下载和安装适用于您的计算机的高优先级更新程序) ...
- js 判断是什么类型浏览器
// firefoxif ( window.sidebar && "object" == typeof( window.sidebar ) && ...