算法本质

快排属于交换排序,快排的基本思想是基于分治的。快排的本质就是通过一趟排序将基准数排到最终的位置。即以基准数为中心将待排序的序列划分成两个子序列,一个子序列是基准数前面的数,都比基准数小;一个子序列是基准数后面的数,都比基准数大。然后递归的对两个子序列重复上述过程。即所有元素都在最终位置上

tips:快排里的基准数也可以理解枢轴,通常取首元素,也可尾元素。
tips:一趟排序也可叫为一次划分。

算法思路

1.左右各有一个指针,首元素作为基准数
2.左侧指针不断右移,右指针也不断左移,将左边比基准数大的数和右边比基准数小的数交换,直到两个指针重合,基准数归位指针重合的位置。成功将表以基准数为中心一分为二
3.然后两个子表递归执行上述过程

代码

首元素作为基准数

public class MyQuiteSortDemo {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};quickSort(arr,0,arr.length-1);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}private static void quickSort(int[] arr, int left, int right) {// 递归结束的条件if(right < left){return;}int left0 = left;int right0 = right;//计算出基准数int baseNumber = arr[left0];while(left != right){//        1,从右开始找比基准数小的while(arr[right] >= baseNumber && right > left){right--;}
//        2,从左开始找比基准数大的while(arr[left] <= baseNumber && right > left){left++;}
//        3,交换两个值的位置int temp = arr[left];arr[left] = arr[right];arr[right] = temp;}//基准数归位int temp = arr[left];arr[left] = arr[left0];arr[left0] = temp;// 递归调用自己,将左半部分排好序quickSort(arr,left0,left-1);// 递归调用自己,将右半部分排好序quickSort(arr,left +1,right0);}
}

快速排序-java版(快排)相关推荐

  1. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  2. 快速排序 详解(快速排序 双路快排 三路快排)

    注:内容,图片来自于慕课网liuyubobobo老师的课程.  官方代码链接:https://github.com/liuyubobobo/Play-with-Algorithms 快速排序 快速排序 ...

  3. Java实现快排(图文讲解)

    文章目录 Java实现快速排序 快速排序原理 快速排序一次划分图文演示过程 整个快速排序的过程 具体Java代码实现 简结快速排序的性能 Java实现快速排序 冲鸭,装上涡轮增鸭,开始学习快速排序算法 ...

  4. java实现快排算法

    前面我详细讲解了快排算法,现在我们用java来实现 直接上代码 package ttt;public class kuaisupaixu {public static int[] quickSort( ...

  5. 快速排序以及基于快排思想的找前k个最大数

    快速排序是对冒泡排序的改进. 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序,它采用一种分治(Divide-and-ConquerMethod)的方法 快速排序的思想: 在数组中找 ...

  6. java三路快排,java二路快排很慢

    老师,以下是我二路快排的java代码 public class quickSortTwoway { public quickSortTwoway() {}; public static void qu ...

  7. Java 单边快排 与 双边快排

    目录 一.单边快排 二.双边快排 一.单边快排 代码:已是该算法的最优情况 package com.wxl;import java.lang.reflect.Array; import java.ut ...

  8. 归并排序、快速排序、二路快排、三路快排python实现

    源代码: https://github.com/lzneu/Algrithm_python O(n*logn)级别的排序: |-归并排序     分成log(n)个层级 每个层级进行O(n)排序   ...

  9. 快速排序——一趟快排

    数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

最新文章

  1. 设置系统和管理计算机硬件的应用程序,Windows7操作系统中用于设置系统和管理计算机硬件的应用程序是()...
  2. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
  3. 2、Flume1.7.0入门:安装、部署、及flume的案例
  4. [PKUWC2018][loj2541]猎人杀
  5. Cactiz中文版安装使用
  6. C4D模型库!你想要的模型这里都有
  7. mysql重复执行命令_mysql----------mysql的一些常用命令
  8. 2022起重机司机(限门式起重机)理论题库模拟考试平台操作
  9. Linux ALSA驱动之声卡的创建流程
  10. 【测试】ESP8266ESP32wifi中继器测试数据
  11. BD NetDisk不限速下载,某度网盘不限速下载,跑满带宽,网盘下载器,网盘高速下载器,不限速网盘下载,AntNetDiskDownloader
  12. 基于AD603的AGC电路
  13. 软件工程实践2018第六次作业——现场UML作图
  14. 做一个迷你播放器放在桌面
  15. 手把手安排 --- JavaH5微信支付(移动端浏览器H5拉起微信支付)
  16. java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x0
  17. java笔试题---用*打印漏斗形,信雅达笔试题
  18. 超高清视频体验-4K片源
  19. 大厂面试:求解集装箱港口翻箱问题的最短路径
  20. python 音乐库_如何将您的音乐库上传到Google Play音乐

热门文章

  1. 静态局部变量和动态局部变量区别
  2. frame和iframe的区别 ------copy滴
  3. CPU型号分析避坑指南——2、游戏电脑与办公电脑CPU该如何选择
  4. idea修改css不起作用
  5. 获取java线程中信息的方法
  6. 抛硬币1000次,至少连续10次正面朝上的概率 详细解答
  7. 微博爬虫 python
  8. 负数在二进制中如何表示
  9. excel常用函数公式及技巧搜集2
  10. Leaflet基本用法