#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的更多相关文章

  1. 快速排序算法(Quicksort)

    快速排序算法是对集合中元素进行排序最通用的算法,俗称快排,其算法的时间复杂度为O(nlgn),空间复杂度为O(1). 我们举例来对其算法思路进行理解,譬如数组 A = { 4, 8, 1, 2, 9, ...

  2. 排序算法——QuickSort、MergeSort、HeapSort(C++实现)

    快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...

  3. 排序算法(1) 快速排序 C++实现

    快速排序基本特性 时间复杂度:O(n*lgn) 最坏:O(n^2) 空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(lgn) 不稳定. 关于快速排序的空间复杂度,谢谢@命运他爹 ...

  4. 我的Java开发学习之旅------>Java经典排序算法之快速排序

    一.算法思想     快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod).(1) 分治法的 ...

  5. peersim中BT网络核心代码解析

    首先大概介绍BT网络运行的整体流程: 开始阶段,一个节点加入到网络中,并向tracker节点发送信息,tracker返回若干个邻居的列表 得到列表后,向每个邻居发送bitfiled信息,来获取他们的文 ...

  6. hadoop2-MapReduce详解

    本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...

  7. pandas-06 Series和Dataframe的排序操作

    pandas-06 Series和Dataframe的排序操作 对pandas中的Series和Dataframe进行排序,主要使用sort_values()和sort_index(). DataFr ...

  8. C++ Templates (Part I 基本概念 The Basics)

    C++ 模板 (C++ Templates) 目录 C++ 模板 (C++ Templates) 第一部分 基本概念 (The Basics) 第一部分章节目录 参考资料 第一部分 基本概念 (The ...

  9. C#高级编程第11版 - 第七章 索引

    [1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...

随机推荐

  1. ~/.config/user-dirs.dirs【桌面设置】

    # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit ...

  2. Table样式

    .tb_org th { background-color: #; color: #ffffff; } .tb_org { border-right: 1px solid silver; border ...

  3. 【转】 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

    系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工具来 ...

  4. 从世界坐标转换成ui的rect坐标的方法

    这个东西整整折磨了我一个通宵.原谅我先这样放上来.明天整理整理 using UnityEngine; using System.Collections; using UnityEngine.UI; p ...

  5. selenium ide脚本回放出现element not found

    原因: 点击按钮,没有设置时间延迟,而页面加载,需要时间:当页面元素未加载完全,执行点击事件,就会报错:element... not found. 解决方案: 在点击事件前添加新的COMMAND.设置 ...

  6. 【转】mysql查询结果输出到文件

    转自:http://www.cnblogs.com/emanlee/p/4233602.html mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select ...

  7. MySQL使用用户变量更新分组排序

    第一个需求是根据A字段进行排序,排序结果更新到B字段 简单搜索之后,很快得到答案 http://dev.mysql.com/doc/refman/5.7/en/update.html ; ) ORDE ...

  8. [iOS]浅谈NSRunloop工作原理和相关应用

    一. 认识NSRunloop  1.1 NSRunloop与程序运行 那么具体什么是NSRunLoop呢?其实NSRunLoop的本质是一个消息机制的处理模式.让我们首先来看一下程序的入口——main ...

  9. 四种主要网络IO虚拟化模型

    本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation.para-virtualization.pass- ...

  10. SQLPlus 在连接时通常有四种方式

    1. sqlplus / as sysdba    操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态.比如我们想要启动数据库就可以用这种方式进入    sqlpl ...