一天一算法:快速排序
i---> 6, 5, 7, 8, 3 , 2 , 9 , 10 <----j
首先以第一个为基准值 6
1: j从右边出发,在j移动到2的时候发现小于6,j停了下来,
然后i开始移动,当i移动到7的时候发现大于6,于是i也停了下来
然后i和j交换了他们所代表的值
6, 5, 7, 8, 3 , 2 , 9 , 10 --> 6, 5, 2, 8, 3 , 7 , 9 , 10
2: 然后j继续向左移动,在移动到3的时候发现小于6,j停了下来,
i也继续移动,当移动到8的时候发现大于6,于是i又停了下来
i和j交换了他们所代表的值
6, 5, 2, 8, 3 , 7 , 9 , 10 --> 6, 5, 2, 3, 8 , 7 , 9 , 10
3: 继续,j继续向左移动,当移动到3的时候i == j,循环结束
这个时候呢,我们要把i代表的值和基准值进行交换
6, 5, 2, 3, 8 , 7 , 9 , 10 --> 3, 5, 2, 6, 8 , 7 , 9 , 10
在这个的整个过程中呢,6我们已经找好了它的位置,我们就不在管它了,于是我们把6前后分成了2组,[3,5,2] 和[8, 7, 9, 10]
我们再继续对[3, 5, 3]和[8, 7, 9, 10]重新上面的过程,最后我们就能得到最终结果:2,3,5,6,7,8,9,10
#include<iostream> using namespace std;int a[] = {6, 5, 7, 8, 3, 2, 9, 10 };void QuickSort(int left, int right) {if (left >= right) //如果left >= right就没有必要交换了,因为本身已经排序了return;int guard = a[left];int i = left;int j = right;while (i != j) {while (a[j] >= guard && i < j) //保证每次要先从右边开始遍历j--;while (a[i] <= guard && i < j)i++;if (i < j) {int t = a[i];a[i] = a[j];a[j] = t;}}a[left] = a[i]; //结束后要把基准值和当前的那个值进行交换a[i] = guard;QuickSort(left, i - 1);QuickSort(i+1, right); }int main() {QuickSort(0, sizeof(a)/sizeof(int) -1);for (int i = 0; i < sizeof(a)/sizeof(int) ;i++ )cout << a[i] << " " ;cout << endl; }
转载于:https://www.cnblogs.com/457220157-FTD/p/4057187.html
一天一算法:快速排序相关推荐
- 读《c#与算法--快速排序》随笔
<c#与算法--快速排序>地址: http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html 随手写的测试DEMO,web程序不 ...
- 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化
今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...
- 快速排序 java导包_排序算法-快速排序(Java实现)
上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...
- 排序算法 快速排序 python 0913
排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...
- 排序算法 快速排序【详细步骤图解】
排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...
- 【图解算法】排序算法——快速排序
简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...
- JavaScript的排序算法——快速排序
排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...
- 十大经典排序算法-快速排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 算法:快速排序实现 定制比较函数
1. 快速排序基本算法 1 #include<stdio.h> 2 const static int NUM = 47; 3 4 int quick_sort(int *a, int st ...
最新文章
- python3练习,python3练习题 - 来自菜鸟的独白
- Java-二叉树算法
- android 保活方案_Android 后台保活手段总结 (上篇)
- 产品经理 - 汽车维修连锁企业 - 发展预测
- java基数排序简单实现_基数排序简单Java实现
- java-spark的各种常用算子的写法
- linux文本编辑器
- VB.NET (VB2008)的免费下载网址
- Flash遮罩之放大镜
- android开发之GPS定位详解
- 把码云项目上传到服务器,将本地项目上传到码云上(vue项目)
- 货币市场基金基础知识
- 李彦宏计算机领域的贡献,李彦宏:AI让计算机懂得人、响应人的需求
- 《爱的五种能力》读后感
- 计算机连接打印机连接打印机,怎么连接打印机.教您怎么连接打印机
- h3cr4900g3安装系统_H3C R4900 G2服务器通过HDM安装系统
- Android开发:LocationManager获取经纬度及定位过程(附demo)
- 突然被裁!国外程序员的各种花式报复手段,非常眼熟…
- Unity5权威讲解之菜鸟读书笔记(一)
- 行业短信 运营思路_游戏行业短信平台解决方案
热门文章
- HackerRank Gift Boxes(hash)
- LeetCode Populating Next Right Pointers in Each Node II(dfs)
- (一)swoole服务启动流程
- python中的eval
- getopt和getopt_long的使用
- C#基础-面向对象-多态
- Netty源码分析第6章(解码器)----第4节: 分隔符解码器
- Git版本库创建(包含文件权限设置 Linux环境下)
- Problem 2238 Daxia Wzc's problem 1627 瞬间移动
- 深入浅出SharePoint2013——获取Application Pool的id和name对照表