快速排序是一种相对比较快的排序,它的思想为:
选取待排序元素序列中的一个元素作为基准值,然后(以升序为例)比基准值小的元素放在基准值左边,比基准值大的元素放在基准值右边,这样的话,原先待排序序列就被分为了左子序列,右子序列,基准值,三个部分,,然后把左子序列看做新的待排序序列进行上述操作,左子序列又被分为新的左右子序列(递归的思想),当左子序列处理完之后再去处理右子序列,最后着呢个待排序序列就有序了。

下面是动图演示过程:

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);//处理左子序列partition(array, from, index - 1);//处理右子序列partition(array, index + 1, to);}/*这是一次单趟排序:1、选出一个key,一般是最左边或是最右边的。2、定义一个L和一个R,L从左向右走,R从右向左走。(需要注意的是:若选择最左边的数据作为key,则需要R先走;若选择最右边的数据作为key,则需要L先走)。3、在走的过程中,若R遇到小于key的数,则停下,L开始走,直到L遇到一个大于key的数时,将L和R的内容交换,R再次开始走,如此进行下去,直到L和R最终相遇,此时将相遇点的内容与key交换即可。(选取最左边的值作为key)经过一次单趟排序,最终使得key左边的数据全部都小于key,key右边的数据全部都大于key。*/private static int partition(int[] array, int from, int to) {int left = from;int right = to;int key = array[from];while (left < right){while (array[right] >= key && right > left)right--;while (array[left] <= key && right > left)left++;swap(array, left, right);}//走到这里说明 left == right了,//让基准值到中间,方便后续处理左子序列swap(array, from, left);return left;}

快速排序思路(Hoare版),代码实现相关推荐

  1. 快速排序思路(前后指针版),代码实现

    快速排序的前后指针法相比于Hoare版和挖坑版在思路上有点不同,前后指针版的思路是引入两个指针cur和prev,在开始的时候先规定一个基准值val(一般为最右边或者最左边的那个数据),然后让两个指针指 ...

  2. 快速排序思路(挖坑版),代码实现

    挖坑版是在Hoare版的基础上做了改造,答题思路还是和Hoare版一样. 挖坑版partition单次过程: 选一个基准值,一般选最左或者最右面,把该基准值存在val变量中,因为值存到了变量里,所以可 ...

  3. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  4. 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...

    为了进入大厂,我想很多人都会去牛客.知乎.CSDN等平台去查看面经,了解各个大厂在问技术问题的时候都会问些什么样的问题. 在看了几十上百篇面经之后,我将算法工程师的各种类型最常问到的问题都整理了出来, ...

  5. PTA 统计工龄 思路分析及代码解析

    PTA 统计工龄 思路分析及代码解析v0.6 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析 三.具体实现 1. ...

  6. 【Python】《大话设计模式》Python版代码实现

    <大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...

  7. ML之LGBMRegressor(Competition):2018年全国大学生计算机技能应用大赛《住房月租金预测大数据赛》——设计思路以及核心代码—191017再次更新

    ML之LGBMRegressor(Competition):2018年全国大学生计算机技能应用大赛<住房月租金预测大数据赛>--设计思路以及核心代码-191017再次更新 目录 竞赛相关信 ...

  8. 网易云信,发送验证码短信C#版代码

    网易云信,发送验证码短信C#版代码 网易云信发送短信代码(C# 版)....需要注意SHA1 String有转换小写!!!! using System; using System.Collection ...

  9. 存根类 测试代码 java_有关为旧版代码创建存根的更多信息–测试技术7

    存根类 测试代码 java 在我的上一个博客中 ,我谈到了如何处理行为不佳的不可测试的 (1) SitePropertiesManager 类,以及如何通过提取接口来创建存根. 但是,如果由于旧类的源 ...

  10. 存根类 测试代码 java_为旧版代码创建存根-测试技术6

    存根类 测试代码 java 任何阅读此博客的人都可能已经意识到,目前我正在开发一个项目,其中包含大量的旧代码,这些旧代码庞大,扩展且编写时从未进行过任何测试. 在使用此遗留代码时,有一个行为非常差的类 ...

最新文章

  1. 满足极高读写性能需求的Key-Value数据库
  2. python 错误 SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac (_ssl.c:1864) 解决方法
  3. 学机械可以转计算机吗,本人合工大车辆工程大一新生,但是机械类前景都不太好,我要不要转计算机,求教?...
  4. XLSReadWriteII 4.00.62 XE2 可以使用
  5. 子网掩码及网络号路由表的匹配方法
  6. 【转】Linux下的多线程编程背景知识
  7. MySQL学习-排序与分组函数
  8. Windows Gadget 制作二
  9. php获取ajax data,HTML 获取 PHP 接口数据(ajax)
  10. break and continue;
  11. java中说明书/开发文档如何编写?
  12. 如何下载高程地图并处理
  13. java在哪里报错_BirthDate.java程序错误在哪里运行不出来写着 c :myjavajavac Test.java Test.java:46 找不到符号 符号...
  14. 目前最新全国行政区域JSON数据截止2015年9月30日
  15. php中subtr()函数的使用方法
  16. Oracle 手工锁表
  17. Vue过滤器的介绍和使用
  18. 经济学知识——LPR、MLF、SLF、SLO、PSL、OMO
  19. matlab求椭圆的弧长,用MATLAB实现求椭球上任意两点的最短弧长
  20. http://blog.csdn.net/heli007/article/details/7279022

热门文章

  1. nQueen问题java实现
  2. [Node.js] 模块化 -- 中间件和跨域
  3. 前端都应懂的入门基础-github基础
  4. 最新基于adt-bundle-windows-x86的android开发环境搭建
  5. C++ 用new 动态创建多维数组
  6. OpenCV3学习(12.4) 粒子滤波Condensation算法
  7. Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式
  8. python template languages_Python template.TemplateSyntaxError方法代碼示例
  9. 关于idea Tomcat部署的一个小坑
  10. Android开发 GradientDrawable详解