快速排序是(挖坑法)是挖坑填数 + 分治来实现。

快速排序的基本思想:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

直接上代码:

package com.wang.sort;import java.util.Arrays;/*** 快速排序之填坑法(挖坑法)<br>* 从数列中挑出一个元素,称为 “基准”(pivot)<br>* 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面<br>* 相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区<br>* (partition)操作<br>* 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。* @author wang* @Date 2018年4月16日**/
public class QuickSort {public static void main(String[] args) {int[] arrays = {12,21,3,5,2,18,7,4,11,9,12};System.out.println("快速排序之挖坑排序前的数组:" +Arrays.toString(arrays));pothlingSort(arrays, 0 , arrays.length - 1);System.out.println("快速排序之挖坑排序后的数组:" +Arrays.toString(arrays));}/*** 挖坑法* @param arrays* @param low* @param high*/public static void pothlingSort(int[] arrays , int low , int high){if(low < high){//求每次分治的分割线int divideIndex = getDivideIndex(arrays,low,high);//再递归分别对分割的俩个子数组进行递归排序pothlingSort(arrays,low,divideIndex -1);pothlingSort(arrays,divideIndex + 1, high);}}private static int getDivideIndex(int[] arrays, int low, int high) {// 将数组最左端arrays[0]作为默认的基准值,将最左端的值放至基准值的坑内。// 此时arrays[0]没有值了,需要从最右端找到一个比基准值小的数填至[0]这个坑。// 再从左到右找到一个比基准值大的数填到刚才的坑。循环进行直到low=high// 将基准值填至刚才的low位置。再进行分治int baseValue = arrays[low];arrays[low] = 0 ;while (low < high){while(low < high && arrays[high] >= baseValue){high--;}arrays[low] = arrays[high] ;arrays[high] = 0 ;while(low < high && arrays[low] <= baseValue){low++;}arrays[high] = arrays[low] ;arrays[low] = 0 ;}if(low == high){arrays[low] = baseValue;}return low;}
}

java 排序算法之快速排序(挖坑法)相关推荐

  1. Java十大排序算法总结,Java排序算法总结之冒泡排序

    本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起    ...

  2. 快速排序--挖坑法详解

    一,思想描述: 何谓挖坑法?我们来看一看详细过程. 给定原始数列如下,要求从小到大排序: 首先,我们选定基准元素Pivot,并记住这个位置index,这个位置相当于一个"坑".并且 ...

  3. 【排序算法】快速排序(C语言)

    [排序算法]-- 快速排序 目录 一.快速排序的单趟排序 1. 霍尔法 2. 挖坑法 3. 前后指针 二.快速排序 1. 排序步骤 2. 排序完整步骤图 3. 快速排序代码 3.1 递归实现 3.2 ...

  4. 十大排序算法之快速排序(两种方法)

    十大排序算法之快速排序 本文采用Java书写选择排序,其他语言类似可以借鉴着写 思想:在待排序序列中选择一个分割元素,将待排序序列中所有比分割元素关键字小的元素移动到分割元素左侧位置:将待排序序列中所 ...

  5. java 排序算法总结,Java排序算法总结之归并排序

    本文实例讲述了Java排序算法总结之归并排序.分享给大家供大家参考.具体分析如下: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.和快速排序类似,让我们一起来看 ...

  6. Java排序算法:冒泡排序

    Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...

  7. 排序算法之----快速排序(快速上手快速排序)

    排序算法之----快速排序(快速上手快速排序) 何为快速排序算法? 快速排序的基本思想又是什么? 其实很简单: 快速排序的基本思想是 1.先从数列中取出一个数作为基准数(这里我们的算法里面取数组最右边 ...

  8. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  9. java排序算法 sort_Java排序算法之SleepSort排序示例

    本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...

最新文章

  1. Gitlab上传代码
  2. C语言满分代码:L1-050 倒数第N个字符串 (15分)
  3. 面经——嵌入式软件工程师ARM体系与架构相关
  4. 【译】《Understanding ECMAScript6》- 第三章-Object
  5. 客户组网服务案列_山西seo关键词排名优化案列
  6. 解决mac管理员变成普通成员
  7. android 关于listview scrollview 底部 控件无法显示的两个解决方案
  8. ASP.Net学习笔记008--ASP.Net揭秘之Input版自增补充说明
  9. GitLab容器注册服务已集成于Docker容器
  10. system什么意思c语言,system是什么意思?
  11. VMware虚拟机网络设置
  12. 台式机计算机无线开关在哪,电脑无线wifi开关在哪里打开
  13. 解决问题:PostgreSQL类型为 json, 但表达式的类型为 character varying
  14. 【操作系统】第3章 内存管理
  15. 超值得入手的无线蓝牙耳机,四款性价比最高的蓝牙耳机品牌推荐
  16. 鸿蒙系统小米电视,鸿蒙系统被曝光!首款鸿浩818芯片,华为智慧屏对标小米电视...
  17. c++ 多边形求交集代码(凸多边形与凸多边形交集)
  18. 零基28岁自学python入坑ing
  19. 从0开始安装k8s1.25【最新k8s版本——20220904】
  20. 从git上克隆的vue项目在本地运行步骤

热门文章

  1. C语言实现十进制转二进制
  2. 【附源码】计算机毕业设计java-重庆工程学校学生体测监测系统-微信小程序设计与实现
  3. ISCA文献翻译:第三篇Efficient Digital Neurons for Large Scale Cortical Architectures
  4. C#时间格式 AM\ PM
  5. java对接 布防 海康威视_基于海康威视SDK javaB/S
  6. 概率逻辑——一辆跑车与两只山羊(理论分析+python实现)
  7. JAVA 实现对图片打码,打马赛克
  8. Appnuim作业题
  9. html5 放鞭炮效果,flash制作鞭炮的爆炸效果(不需AS)
  10. Non-Salient Region Object Mining for Weakly Supervised Semantic Segmentation