Java编程:排序算法——快速排序
快速排序法介绍
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
快速排序法示意图
快速排序法应用实例
要求: 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。【测试8w和800w】
说明[验证分析]:
- 如果取消左右递归,结果是 -9 -567 0 23 78 70
- 如果取消右递归,结果是 -567 -9 0 23 78 70
- 如果取消左递归,结果是 -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编程:排序算法——快速排序相关推荐
- 在线编程——排序算法总结
在线编程--排序算法总结 找实习,阿里一面遇到手写快排,写出来感觉没错(VS2013能通过),但在阿里的测试平台上运行未通过.细思极恐,赶紧总结一波.有幸看到SteveWang的两篇博客:排序算法总结 ...
- 【图解算法】排序算法——快速排序
简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...
- Java经典排序算法
提示:本文仅供自己学习 Java经典排序算法 一.排序算法概念及分类 1.排序概念 2.排序分类 二.十大排序算法 1.冒泡排序(BubbleSort) 2.选择排序(Selection sort) ...
- Java常见排序算法
Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html
- 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化
今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...
- Java常见排序算法之插入排序
一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...
- 排序算法 快速排序 python 0913
排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...
- 排序算法 快速排序【详细步骤图解】
排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...
- java treemap 排序原理,Java TreeMap排序算法实例
本文实例讲述了Java TreeMap排序算法.分享给大家供大家参考,具体如下: TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序: 以前在项目中,从数据库查 ...
- JavaScript的排序算法——快速排序
排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...
最新文章
- ES5-Array-join
- DC/DC电源模块介绍
- Mac开发 - 使用CCMenu和CCMenuItem添加菜单、右击菜单、Dock菜单
- python while循环语句-Python While 循环语句
- spring spring c3p0 mysql配置_Spring通过c3p0配置bean连接数据库
- 使用IQueryable扩展方法实现复杂查询条件
- MySql索引分析及查询优化
- 如何将Excel转换为vCard
- IOS测试的一般流程和注意事项
- 微信小程序 自定义底部导航栏
- 噪音分贝测试软件在线,分贝测试(在线分贝测试仪)
- vue清除地址栏参数
- Network App Recommend
- 8.0时代的微信营销怎么玩,才能挖掘用户最大价值
- 数字取证二 熟练掌握鉴证大师 了解NTFS分析、LogFile文件使用和USN日志分析
- js三座大山——原型及原型链
- 网络安全从业者超全书单推荐
- 树莓派串口通信python,【树莓派Pico测评】- AD采集示例及串口通信
- 为没有后缀名的文件设置默认打开方式——Notepad++
- 冯诺依曼结构计算机方案包含3个要点,冯诺依曼体系结构计算机的要点和工作过程.doc...
热门文章
- css3中关于transform rotate、translate()、skew()、scale()的复合变换
- css中利用margin来隐藏元素
- jquery中的过滤filter not的用法以及可以添加this
- yarn依赖管理工具,和fis3构建工具 gulp详细用法
- libgdx学习记录5——演员Actor
- c# datagridview列形式为Combobox,每行下拉选项不一样
- 对话面板,发送对话之后滚动至最新内容处
- Linux 安装 safe-rm 工具(转载)
- Python pip freeze获取安装的Python包并使用pip install -r还原到这些包环境(转载)
- dts directshow filter_DTS是什么?详解来了