快速排序思路(前后指针版),代码实现
快速排序的前后指针法相比于Hoare版和挖坑版在思路上有点不同,前后指针版的思路是引入两个指针cur和prev,在开始的时候先规定一个基准值val(一般为最右边或者最左边的那个数据),然后让两个指针指向基准值的下一个数,开始下面循环:
若cur指向的内容小于key,则prev先向后移动一位,然后交换prev和cur指向的数,然后cur++;如果cur指向的内容大于val,则cur++。
直到cur走完整个序列,此时为了让基准值在中间,只需val和prev交换单次排序就完成了。下面是单次排序的动图:
在循环的过程中整个除了基准值的序列被prev和cur分成三个部分(拿升序举例):
(from, prev) :这是这个区间的数都是小于等于基准值的;
[s, i):这个区间都是大于基准值的
[i, to]: 是还没有被比较过的
下面是代码:
public static void quickSort(int[] array){//把基准值选在待排序序列的最左边,第一次就是 0 的位置。quickSortRange(array, 0, array.length - 1);}private static void quickSortRange(int[] array, int from, int to) {int size = to - from + 1;//递归结束条件if (size <= 1)return;//先处理传入序列,返回值为一次单趟排序之后的基准值的位置,//基准值左边为左子序列,基准值右边为右子序列int index = partition(array, from, to);//处理左子序列quickSortRange(array, from, index - 1);//处理右子序列quickSortRange(array, index + 1, to);}
public static int partition(int[] array, int from, int to){int val = array[from];int s = from + 1;for (int i = from + 1; i <= to; i++){if (array[i] < val){swap(array, i, s);s++;}}swap(array, from, s - 1);return s - 1;}
快速排序思路(前后指针版),代码实现相关推荐
- 快速排序思路(挖坑版),代码实现
挖坑版是在Hoare版的基础上做了改造,答题思路还是和Hoare版一样. 挖坑版partition单次过程: 选一个基准值,一般选最左或者最右面,把该基准值存在val变量中,因为值存到了变量里,所以可 ...
- 快速排序思路(Hoare版),代码实现
快速排序是一种相对比较快的排序,它的思想为: 选取待排序元素序列中的一个元素作为基准值,然后(以升序为例)比基准值小的元素放在基准值左边,比基准值大的元素放在基准值右边,这样的话,原先待排序序列就被分 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- 网易云信,发送验证码短信C#版代码
网易云信,发送验证码短信C#版代码 网易云信发送短信代码(C# 版)....需要注意SHA1 String有转换小写!!!! using System; using System.Collection ...
- 用母函数的思路解释母函数的代码
该文章建立在你已经看过母函数的相关数学知识的基础上,如果没有看过,建议看一下 hdu 论坛的母函数课件,传送门:http://acm.hdu.edu.cn/forum/read.php?tid=385 ...
- 存根类 测试代码 java_有关为旧版代码创建存根的更多信息–测试技术7
存根类 测试代码 java 在我的上一个博客中 ,我谈到了如何处理行为不佳的不可测试的 (1) SitePropertiesManager 类,以及如何通过提取接口来创建存根. 但是,如果由于旧类的源 ...
- 存根类 测试代码 java_为旧版代码创建存根-测试技术6
存根类 测试代码 java 任何阅读此博客的人都可能已经意识到,目前我正在开发一个项目,其中包含大量的旧代码,这些旧代码庞大,扩展且编写时从未进行过任何测试. 在使用此遗留代码时,有一个行为非常差的类 ...
- 为旧版代码创建存根–测试技术6
任何阅读此博客的人都可能已经意识到,目前我正在开发一个包含大量旧代码的项目,这些旧代码庞大,扩展且编写时从未进行过任何测试. 在使用此遗留代码时,有一个行为异常的类非常普遍,整个团队都一次又一次地犯错 ...
- 有关为旧版代码创建存根的更多信息–测试技术7
在上一个博客中 ,我谈到了如何处理行为不佳的不可测试的 (1) SitePropertiesManager 类,以及如何通过提取接口来创建存根. 但是,如果由于旧类的源代码已被锁定在第三方JAR文件中 ...
最新文章
- 编写优质代码的 6 大关键方法
- linux18.04安装显卡驱动,详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!)
- Mac OS build caffe2 Error:This file was generated by an older version of protoc which is
- boost::convert模块实现算法的测试程序
- 使用Container.ItemIndex获取Repeater、Gridview行的序号的简单方法
- Java多线程系列——深入重入锁ReentrantLock
- 3、java中的数据类型和运算符
- HDFS上传文件命令报错org.apache.hadoop.ipc.RemoteException(java.io.IOException)
- cmd窗口使用python提示“Python not found”,可能是环境变量配置的原因
- python冒泡排序原理_如何实现python冒泡排序算法?
- 单片机声明数组可变长度c语言keil,单片机用byte定义数组keil编译警告 missing';'before...
- Android 源码分析(三) Service 启动分析
- android 在指定位置添加布局,Android 如何动态添加 View 并显示在指定位置。
- 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON5数码管动态显示
- android简易播放器2:activity和service同步显示
- 程序员常用的网站合集
- 大数据分析与实践 数据预处理-主成分分析
- 菜鸟说有线网络连接故障
- 玩笑程序“疯”字病毒 感染.exe 专杀方案
- oracle常用函数之trim( )、ltrim( )、rtrim( )