算法-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 ...
随机推荐
- Android 异步消息处理机制
1.Handler的由来 当程序第一次启动的时候,Android会同时启动一条主线程( Main Thread)来负责处理与UI相关的事件,我们叫做UI线程. Android的UI操作并不是线程安全的 ...
- JOIN关联表中ON,WHERE后面跟条件的区别
select * from td left join (select case_id as sup_case_id , count(*) supervise_number from td_kcdc ...
- CentOS 配置防火墙操作实例(启、停、开、闭端口):
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status< ...
- ireport5.6+jasperreport6.3开发(一)--中文环境配置在
ireport在pdf的情况下无法显示中文字的解决方法 1,首先下载宋体的ttf(注意ttc的不行)下载链接如下(注意你可以用其他的ttf不一定要宋体) http://files.cnblogs.co ...
- pom.xml里有红叉报错的解决办法
pom.xml里有红叉报错的解决办法一: 1.把鼠标点在报的错上发现pom.xml报如下错误: Multiple annotations found at this line: - Failure t ...
- Gamemaker Studio运行时弹出打开窗口导致无法启动的错误
Desc 初次使用遇到一个问题,点击Run的时候并没有运行当前工程而是弹出一个打开窗体 Steam里面相同问题描述:Compile error 后续才得知是要选择data.win,但是这个文件根本就没 ...
- python——SQL基本使用
终于学到数据库操作了,这意味着什么?以后再也不用从文件里读写数据了,过程实在太复杂了~~~为了纪念这个激动人心的时刻,一定要写一篇博客! 使用mysql数据库——增 插入一条数据 首先,还是先解释一下 ...
- python的字符串内建函数
http://www.ziqiangxuetang.com/python/python-strings.html
- javascript快速排序
function quickSort(arr){ if(arr.length <= 1) return arr;//判断是否有效数组 var cut = Math.floor(arr.lengt ...
- 关于ssh上传文件
今天用ssh传项目到公司总部的服务器上,报了错误: encountered 1 errors during the transfer 重启ssh再次上传还是一样的错误,然后我让公司那里重启一下服务器, ...