简单的快排就是定义一个基准数和一左一右两个“哨兵”,右侧哨兵找比不大于基准数的值,左侧找不小于基准的数,找到后交换两个哨兵对应值的位置,然后继续向左,向右寻找符合条件的数,知道左、右哨兵相遇后,将基准值和左哨兵值交换即可,此时,交换后的基准值左侧都是小于它的值,右侧都是大于它的值,然后以此方式分别处理左侧数据和右侧数据

package com.nxz.blog.otherTest;public class Test {public static void main(String[] args) {Test t = new Test();int[] ints = {2, 1, 4, 5, 6, 3, 8, 1, 0, 22, 33, 12, 1, 2};t.quickSort(ints, 0, ints.length - 1);for (int i : ints) {System.out.print(i + " ");}}/*** 基本的快排,就最左侧数设置为基准数,设置l,r索引,分别代表左侧索引值,和右侧索引值,r递减从右侧开始找比基准小的数,l递增从左侧开始找比基准大的数,* 然后将两个数调换位置,循环多次知道l==r时,终止循环,最终将基准数和l值调换位置,* 然后递归调用quickSort(left,i-1),quickSort(i+1,right)** @param arr*/public void quickSort(int[] arr, int left, int right) {//递归终止条件if (left > right) {return;}int base = arr[left];int l = left;int r = right;//l=r时就不用再次循环比较了  一趟代表只调换了两个值,以一个值为基准时,会多次调换值,因此需要循环,直到l==r时,代表该基准值左右侧已经调换完毕,最后//再将基准值和l值调换即可(也就是讲基准值归位,左侧为小于基准的数,右侧为大于基准的数)while (l != r) {//从右侧找小于基准的数while (l < r && arr[r] >= base) {r--;}//从左侧找大于基准的数while (l < r && arr[l] <= base) {l++;}if (l < r) {swapInt(arr, l, r);}}//基准和l调换swapInt(arr, left, l);//递归左侧和右侧数组 (采用分治的思想,两个递归方法调用完毕后,就认为左右两侧已经排好)quickSort(arr, left, l - 1);quickSort(arr, l + 1, right);}/*** 交换数组中的两个数** @param arr* @param left* @param right*/private void swapInt(int[] arr, int left, int right) {int temp = arr[left];arr[left] = arr[right];arr[right] = temp;}
}

基础-快速排序(基本)相关推荐

  1. 跟左神学算法2 排序相关

    内容: 1.复杂排序 2.排序总结 3.比较器 4.实际问题 注:实现代码为Java 1.复杂排序 说明:关于简单排序(冒泡排序.选择排序.插入排序)  看这里:https://www.cnblogs ...

  2. go每日新闻(2022-03-07)——Go 原生并发原语和最佳实践

    每日一谚:If you don't understand the data, you don't understand the problem. go中文网每日资讯--2022-03-07 一.Go语 ...

  3. [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章

    最近在做LeetCode的题目.面试和笔试后发现经常考察快速排序的知识.通过这篇文章介绍,能让你彻底的了解和学习快排,主要从一下三个部分进行介绍:         一.C语言实现qsort快速排序   ...

  4. Java语言基础(常见对象3(数组排序(冒泡排序、选择排序、直接插入排序、快速排序、归并排序)、Arrays、基本数据类型包装类、Integer类、自动拆箱、自动装箱))

    Java语言基础 常见对象 数组排序 冒泡排序 相邻元素两两比较,大的往后放,第一次完毕,最大值的元素就会出现在最大索引处:以此循环 //冒泡排序:public static void main(St ...

  5. 【一起来刷题】基础排序问题之快速排序算法

    本章收录于专栏:一起来刷题,持续更新中-- 更多精彩文章,欢迎大家关注我,一起学习,一起进步~ 本章来谈一谈快速排序算法.快排算法是一种很重要的算法,也经常会在面试中遇到.快排的时间复杂度为O(Nlo ...

  6. 计算机软件技术冒泡排序,北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序...

    北航计算机软件技术基础实验报告计软实验报告3--冒泡排序和快速排序 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验报告实验名称 ...

  7. C指针原理(22)-C指针基础-att汇编-快速排序

    第一趟排序 以第一个数-2为标准 xxx@xxx-laptop:~/private/mytest$ gcc -o testpx1 testpx1.s xxx@xxx-laptop:~/private/ ...

  8. 前端基础12:递归调用,快速排序和简单DOM元素操作

    递归调用 递归调用,方法自己调用自己(重复执行方法中的逻辑) 1.在方法内部调用自己的方法写在return 2.设置边界条件,让递归调用停下来 function fn(n) {if(n == 1){r ...

  9. 基础算法之快速排序Quick Sort

    原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...

最新文章

  1. 特殊用户邮箱附件大小设置
  2. NVIDIA Jetson Xavier NX上导入tensorflow报错:AttributeError: module ‘wrapt‘ has no attribute ‘ObjectProxy‘
  3. sql server修改索引名称_索引基本知识和索引优化
  4. 线段树 区间更新模板
  5. React  学习第二天 2018-07-21
  6. Silverlight Tools只支持英文版VS2008
  7. zabbix--3.0--3
  8. server.MapPath的相对路径问题
  9. linux服务器怎么安装360杀毒软件,360主机卫士Linux版使用安装教程
  10. UCHome二次开发:uchome文件体系介绍
  11. FI-盘盈盘亏借贷科目
  12. echarts框架下大数据量展示的解决方案
  13. 阿里云飞天系统质效管理体系入选信通院“软件质效领航者”优秀案例
  14. 数据结构与算法——23. 用嵌套列表与链表实现树结构
  15. 不想长期打工,可做这5个冷门生意,知道的人不多,利润却不错
  16. 凸多边形最小面积包围矩形
  17. python魔方方法__getitem__、__setitem__和__len__
  18. 2018中国计算机学会推荐国际学术会议(人工智能)
  19. 系统维护工具之Glary Utilities Pro 5.33 专业版|全能系统维护军刀
  20. 那个即将掌舵阿里巴巴的张勇,是马云的超级粉丝!

热门文章

  1. linux提示光标下无字符串,vim复制、粘贴、删除、撤销、移动光标(linux)
  2. JavaScript复杂判断的更优雅写法
  3. 八代i7装服务器系统2012,八代I7能装win7系统吗,会影响性能吗-8代win7,8代cpu完美装win7...
  4. android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转
  5. java soap 头_如何将java头添加到java中的soaprequest
  6. html.锁屏主题,锁屏HTML主题插件GroovyLock发布
  7. yum error: rpmdb: BDB0113 Thread/process
  8. jquery 控制CSS属性display 实现元素的显示、隐藏
  9. java.nio.file.FileSystemException: xxx: Too many open files
  10. idea 设置项目子模块之间的依赖