快速排序:在一组数据中,可以将左边的数字当作枢轴(右边也可以),接下来要做的就是,先从右边找到比枢轴小的数,

再从左边找到比枢轴大的数,接着将这两个数进行交换,重复上述步骤找出所有符合条件的数进行交换,

最后将枢轴放到比枢轴大的数与比枢轴小的数之间。之所以要从右边开始找,并且找到比枢轴小的数是因为交换后小的数就在枢轴的左边了。

下面举个比较特殊的例子希望能增加理解。

1

9

8

5

6

7

3

2

0

4

先从右往左找到比1小的第一个数字为0,此时的索引位置j=8,再从左往右找到比1大的第一个数字为9,此时的索引位置i=1,此时交换0和9,

1

0

8

5

6

7

3

2

9

4

继续下一次重复任务

先从右往左找到比1小的第一个数字为0,此时的索引位置,j=1,而从左往右找到比1大的第一个数字8此时的索引i=2,很明显i>j,这是不允许的,

所以这时候就可以让所选的枢轴1与j位置上的值交换(也就是把枢轴放到两组数字中间)

0

1

8

5

6

7

3

2

9

4

先看1左边的情况此时就一个数字1已经排好,

再看右边的情况,从j+1的位置开始到最后,且以j+1的位置为枢轴,

从右边找比8小的第一个数字为4,索引j=9,从左边找比8大的第一个数字为9,索引i=8,交换4和9

8

5

6

7

3

2

4

9

按照上述逻辑继续

9

5

6

7

3

2

8

9

8的左边

4

5

6

7

3

2

从右往左找比4小的数字,从左往右找比4大的数字,并交换

4

2

6

7

3

5

继续

4

2

3

7

6

5

继续

3

2

4

7

6

5

8的左边又被4分成两段

8的右边

9

4的左边

3

2

2

3

4的右边

7

6

5

这一次同样以左边为枢轴,从右边找到5,左边会一直找知道找到5所在的位置此时j=i

跳出循环直接把7与j的位置交换,让枢纽7将这3个数分开,实际上7的右边没有值了

只需考虑7的左边

5

6

7

所以最终就排好了

0

1

2

3

4

5

6

7

8

9

以下是c++带模版的快速排序代码

 #include <iostream>

 using namespace std;

 template<class T>
void QuickSort(T *q, int left, int right); int main()
{
int a[]={,,,,,,,,,};
QuickSort(a, , );
for(int i=; i<; i++)
cout << a[i] << endl;
return ;
} template<class T>
void QuickSort(T *q, const int left, const int right)
{
if(left<right)
{
int i=left, j=right;
int temp = q[left];
while(i<j)
{
while(q[j]>=temp && i<j)
{
j--;
}
while(q[i]<=temp && i<j)
{
i++;
}
swap(q[i],q[j]);
}
swap(q[left], q[j]);
QuickSort(q, left, j-);
QuickSort(q, j+, right);
}
}

对快速排序的理解以及相关c++代码的更多相关文章

  1. 创建HttpFilter与理解多个Filter代码的执行顺序

    1.自定义的HttpFilter,实现Filter接口 HttpFilter package com.aff.filter; import java.io.IOException; import ja ...

  2. 快速排序的理解和实现(Java)

    快速排序介绍 快速排序(Quick Sort)使用分治法策略,其基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对这两部分记录继续进 ...

  3. 关于Spring的理解和相关笔记

    java不死的原因就是:就是因为他有一个核心非常强大的技术框架支持. Spring IOC: Inverse Of Control 控制反转 IFly fly; AOP: Aspect Oriente ...

  4. 深入理解xLua基于IL代码注入的热更新原理

    目前大部分手游都会采用热更新来解决应用商店审核周期长,无法满足快节奏迭代的问题.另外热更新能够有效降低版本升级所需的资源大小,节省玩家的时间和流量,这也使其成为移动游戏的主流更新方式之一. 热更新可以 ...

  5. java中快速排序的理解以及实例

    所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换 ...

  6. 我终于理解了LISP『代码即数据|数据即代码』的含义

    以前我一直不能理解LISP里引用的作用,感觉引用和字符串没什么区别.比如:> (define (func)     'ok) > (func) 'ok 这里把引用ok当做了函数func的返 ...

  7. java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作

    项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...

  8. [2017-08-16]ABP系列——QuickStartB:正确理解Abp解决方案的代码组织方式、分层和命名空间

    本系列目录:Abp介绍和经验分享-目录 介绍ABP的文章,大多会提到ABP框架吸收了很多最佳实践,比如: 1.N层 (复用一下上篇的图) 展现层(Personball.Demo.Web):asp.ne ...

  9. java类的理解和相关问题

    ---java抽象类 当我们定义的对象无法抽象或者不适合抽象为一个具体的类的时候 我们通常定义其为一个抽象类 like 衣服 (多种衣服) 手机 (多种手机) ---接口和抽象类的异同 对于概念上来说 ...

随机推荐

  1. js 删除节点

    亲身经历,寻得此法,告知大家=============== 在javascript操作dom树的时候可能会经常遇到增加,删除节点的事情,比如一个输入框后一个增加按钮,一个删除按钮,点击增加就增加 个输 ...

  2. CentOS7 升级Python2.x到3.x

    CentOS 7 中默认安装了 Python,版本比较低(2.7.5),为了使用新版 3.x,需要对旧版本进行升级.由于很多基本的命令.软件包都依赖旧版本,比如:yum.所以,在更新 Python 时 ...

  3. ajax默认是异步的

    jquery中的ajax 默认情况下为异步请求,即 async:true,可以通过设置参数 asycn:false 到使其同步 $.ajax({ url: 'www.test.com/test/tes ...

  4. 【原】Python基础-循环语句

    x = 1while x <= 10: print(x) x += 1 password = ""while password != "3213554": ...

  5. java基础类型源码解析之String

    差点忘了最常用的String类型,我们对String的大多数方法都已经很熟了,这里就挑几个平时不会直接接触的点来解析一下. 先来看看它的成员变量 public final class String { ...

  6. JavaScript WebSocket 使用总结

    翻看之前写的 Highcharts使用总结  和 前后台交互之传参方式,想对 WebSocket 单独写一个使用总结. 一.认识 WebSocket . WebSocket 是 H5 新出的一种协议, ...

  7. CPU | 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

    当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个术语搞混淆:物理 CPU.逻辑 CPU. ...

  8. Error setting null for parameter #10 with JdbcType

    转: Error setting null for parameter #10 with JdbcType OTHER . 2014年02月23日 11:00:33 厚积 阅读数 58535   my ...

  9. python学习:python的常用功能示例2

    1. python 写入txt with open("douban.txt","w") as f: f.write("这是个测试!") fi ...

  10. python中列表,元组的乘法

    直接上code吧,还可以这么玩儿 li=[1,] li=li*3 print(li) out: [1, 1, 1] =========== >>> t=(1,2) >>& ...