快速排序,采用分治法思想,开始选一个基准元素(默认第一个,也是第一个坑的位置),然后一个左指针,一个右指针,开始右指针向左移动,遇到比基准元素小的停下,放到坑的位置,这个元素的位置就成了新的坑,,然后左指针开始向右移动遇到比基准元素大的停下,把元素放入刚才新的坑的位置,这个位置又成了新的坑,,然后再移动右指针....然后再移动左指针...当两个指针重合时,最后一个坑的位置填入基准元素,最终比基准元素小的在左侧,比基准元素大的在右侧,依次循环递归下去。

package com.xhx.sort;import org.junit.Test;import java.util.Arrays;/*** 填坑法,递归* 基准元素默认选地一个,先移动右指针,再移动左指针,* 每找到一个元素,就把它放入坑中,这个元素的位置就变成了新的坑的位置*,然后再换另一测指针移动*/public class App {@Testpublic void testQuickSort(){int[] array = {1,0};quickSort(array,0,array.length-1);System.out.println(Arrays.toString(array));}public void quickSort(int[] arr, int startIndex, int endIndex){if(startIndex>=endIndex){return;}//基准位置默认地一个元素int pivot = arr[startIndex];int left = startIndex+1; //这里+1了,下面的while都应该加上=条件,否则两个元素就出问题了int right = endIndex;//要填的坑的位置int index = startIndex;while (right>=left) {//右指针循环左移while (left <= right) {if (arr[right] <= pivot) { //遇到比基准元素小的,填入坑的位置,移动左指针arr[index] = arr[right];index = right;left++;break;}right--;}//左指针循环右移while (left <= right) {if (arr[left] > pivot) { //遇到比基准元素大的,填入坑的位置,移动右指针arr[index] = arr[left];index = left;right--;break;}left++;}}//把开始定义的基准元素填入坑,pivot左侧就是小的,右侧就是大的,index就是分割点arr[index]=pivot;quickSort(arr,startIndex,index-1);quickSort(arr,index+1,endIndex);}
}

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

排序(三)之快速排序 填坑法相关推荐

  1. 手写Spring-第三章-来填坑吧!有参bean的实例化策略

    前言 上次我们终于把bean实例化这一步骤交给Spring容器了,这是个了不起的进步.但是,我们还是埋下了一个坑,那就是,这个实例化的手段,过于粗糙了.我们仅仅是简单的调用了newInstance方法 ...

  2. java 排序算法之快速排序(挖坑法)

    快速排序是(挖坑法)是挖坑填数 + 分治来实现. 快速排序的基本思想: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左 ...

  3. 一次macOS的升级填坑(macOS Catalina - macOS Monterey)

    目录 小序 一.升级前操作 二.升级中 三.问题填坑 1.像我一样长时间卡在一个进度条怎么办 2.在更新途中重启过电脑(完整流程填坑) 3.安装之后不能开机,如何紧急拷贝资料 4.安装不成功,如何重新 ...

  4. 快速排序(Quick Sort)—挖坑填数法

    前面的博文讲了冒泡排序.选择排序.插入排序,今天我们谈谈快速排序! 快速排序的基本思想是: 1.先从序列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它 ...

  5. 排序1:快速排序(三种)、归并排序、计数排序

    快排 1. hoare法 思路: 每次确定一个key[首元素]位置,从此分了两个区间:[0,key-1],[key+1,end]. 每个内部排序是双循环:取第一个为key,R先走,R找小,L找大,注意 ...

  6. 《Getting Started with D3》填坑之旅(六):第三章(下)

    Chapter 3. Scales, Axes and Lines(比例尺.坐标轴与线) (接上篇:<Getting Started with D3>填坑之旅(五):第三章(上)) 示例2 ...

  7. 阿里云ECS服务器配置LAMP时安装配置PHP扩展填坑(三)

    阿里云ECS服务器配置LAMP时安装配置PHP扩展填坑(三) apache+mysql配置完成.问题解决后,接下来就是安装配置PHP了,按照阿里云官方lamp配置文档(https://help.ali ...

  8. java 实现 常见排序算法(三)快速排序

    大家好,我是烤鸭: 今天分享一下基础排序算法之快速排序.快速排序是内部排序(基于比较排序)中最好的比较算法. 1.     快速排序: 原理:在要排的数(比如数组A)中选择一个中心值key(比如A[0 ...

  9. 数据结构与算法 | 快速排序:Hoare法, 挖坑法,双指针法,非递归, 优化

    前两章讲解了排序中的选择排序和插入排序,这次就来讲一讲交换排序中的快速排序. 快速排序时间复杂度:平均 O(nlogn) 最坏 O(n2) 快速排序,顾名思义,它的排序的效率是非常高的,在数据十分杂乱 ...

  10. 快速排序 (挖坑法)+partion函数的应用

    目录 快排与冒泡排序比较 快排分析 代码如下: 测试结果: partion函数的应用(第k大数 力扣703) 传统的堆(priority_queue)排序解决第k大数代码: 堆排序结果: 快排part ...

最新文章

  1. 分区表导入导出[未完]
  2. AI基础:特征工程-类别特征
  3. Flume原理及使用案例
  4. android地图方位角_Android获取经纬度、计算距离、方位角
  5. boot空间不足 linux,linux——boot空间不足
  6. 超级便宜的鸿蒙开发板环境搭建-编译-烧录
  7. 20210325:力扣递归,回溯类型题目合集
  8. libgdx之瓦片地图(TiledMap)
  9. 浏览器首页被360恶意篡改,解决方法
  10. A股日内回转交易方法有哪些?
  11. 想要走上巅峰?练好演讲也是必不可少的技能
  12. spring boot 2.1.7启动过程源码解析
  13. Pόlya定理详解及例题
  14. 判断多边形的凹凸性和计算多边形面积:利用向量叉乘
  15. ElasticSearch学习2_Java version:1.7.0_51 suffers from critical bug及ES对JDK版本要求
  16. Linux CFS调度器:原理和实现
  17. WPScan使用完整攻略:如何对WordPress站点进行安全测试
  18. PLC也能制作小游戏----Codesys编写推箱子小游戏
  19. c语言简单课程设计报告,C语言课程设计报告—范例
  20. Revit二次开发-资源汇总(书籍、网站、案例...)

热门文章

  1. linux root邮箱地址,Linux中自动送给root的mail可以发给互联网上的emai? 爱问知识人...
  2. mac小白怎么下载网页视频?
  3. 一元二次方程的简单解法
  4. 什么是受限股票(RSU)、二级市场、蓝筹股
  5. S5P6818开发板移植OV5640摄像头
  6. 如何用计算机还原魔方,魔方复原
  7. 你属于哪种性感女人?
  8. pyqt5 设置按钮圆角
  9. shiro 自定义FormAuthenticationFilter,记住我
  10. Rope3d数据集分析