快速排序法介绍

快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

快速排序法示意图


快速排序法应用实例

要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。【测试8w和800w】
说明[验证分析]:

  1. 如果取消左右递归,结果是 -9 -567 0 23 78 70
  2. 如果取消右递归,结果是 -567 -9 0 23 78 70
  3. 如果取消左递归,结果是 -9 -567 0 23 70 78

代码

package sort;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;public class QuickSort {public static void main(String[] args) {int[] arr = {8,1,3,6,4,2,5};quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));// 测速
//        int[] arr = new int[80000];
//        for (int i = 0; i < 80000; i++) {//            arr[i] = (int) (Math.random() * 80000);// 生成一个0-80000的数据
//        }
//        Date date1 = new Date();
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String date1Str = simpleDateFormat.format(date1);
//        System.out.println("排序前的时间为:" + date1Str);
//        quickSort(arr,0,arr.length-1);
//        Date date2 = new Date();
//        String date2Str = simpleDateFormat.format(date2);
//        System.out.println("排序后的时间为:" + date2Str);}public static void quickSort(int[] arr, int left, int right) {int l = left;   // 左下标int r = right;  // 右下标// pivot 是中轴值int pivot = arr[(left + right) / 2];int temp = 0;   // 临时变量// while循环的目的是让比pivot值小的值放到其左边,大的放到右边while (l < r) {// 在pivot左边一直找,找到一个大于等于pivot的值while (arr[l] < pivot) {l += 1;}// 在pivot右边一直找,找到一个小于等于pivot的值while (arr[r] > pivot) {r -= 1;}// 如果l>=r 说明pivot的左右两边的值,已经左边小于pivot右边大于pivot的值if (l >= r) {break;}// 交换temp = arr[l];arr[l] = arr[r];arr[r] = temp;// 如果交换完成后发现arr[l] == pivot 的值相等,那么让r--,前移一步if (arr[l] == pivot) {r -= 1;}// 如果交换完成后发现arr[r] == pivot 的值相等,那么让l--,后移一步if (arr[r] == pivot) {l += 1;}}// 如果l==r,必须l++ r--,否则栈溢出if (l == r) {l += 1;r -= 1;}if (left < r) {quickSort(arr, left, r);}if (right > l) {quickSort(arr, l, right);}}
}

Java编程:排序算法——快速排序相关推荐

  1. 在线编程——排序算法总结

    在线编程--排序算法总结 找实习,阿里一面遇到手写快排,写出来感觉没错(VS2013能通过),但在阿里的测试平台上运行未通过.细思极恐,赶紧总结一波.有幸看到SteveWang的两篇博客:排序算法总结 ...

  2. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  3. Java经典排序算法

    提示:本文仅供自己学习 Java经典排序算法 一.排序算法概念及分类 1.排序概念 2.排序分类 二.十大排序算法 1.冒泡排序(BubbleSort) 2.选择排序(Selection sort) ...

  4. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  5. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  6. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  7. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  8. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  9. java treemap 排序原理,Java TreeMap排序算法实例

    本文实例讲述了Java TreeMap排序算法.分享给大家供大家参考,具体如下: TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序: 以前在项目中,从数据库查 ...

  10. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

最新文章

  1. ES5-Array-join
  2. DC/DC电源模块介绍
  3. Mac开发 - 使用CCMenu和CCMenuItem添加菜单、右击菜单、Dock菜单
  4. python while循环语句-Python While 循环语句
  5. spring spring c3p0 mysql配置_Spring通过c3p0配置bean连接数据库
  6. 使用IQueryable扩展方法实现复杂查询条件
  7. MySql索引分析及查询优化
  8. 如何将Excel转换为vCard
  9. IOS测试的一般流程和注意事项
  10. 微信小程序 自定义底部导航栏
  11. 噪音分贝测试软件在线,分贝测试(在线分贝测试仪)
  12. vue清除地址栏参数
  13. Network App Recommend
  14. 8.0时代的微信营销怎么玩,才能挖掘用户最大价值
  15. 数字取证二 熟练掌握鉴证大师 了解NTFS分析、LogFile文件使用和USN日志分析
  16. js三座大山——原型及原型链
  17. 网络安全从业者超全书单推荐
  18. 树莓派串口通信python,【树莓派Pico测评】- AD采集示例及串口通信
  19. 为没有后缀名的文件设置默认打开方式——Notepad++
  20. 冯诺依曼结构计算机方案包含3个要点,冯诺依曼体系结构计算机的要点和工作过程.doc...

热门文章

  1. css3中关于transform rotate、translate()、skew()、scale()的复合变换
  2. css中利用margin来隐藏元素
  3. jquery中的过滤filter not的用法以及可以添加this
  4. yarn依赖管理工具,和fis3构建工具 gulp详细用法
  5. libgdx学习记录5——演员Actor
  6. c# datagridview列形式为Combobox,每行下拉选项不一样
  7. 对话面板,发送对话之后滚动至最新内容处
  8. Linux 安装 safe-rm 工具(转载)
  9. Python pip freeze获取安装的Python包并使用pip install -r还原到这些包环境(转载)
  10. dts directshow filter_DTS是什么?详解来了