排序算法——快速排序详解(java实现)
来源:互联网 发布:高晓松 阿里 知乎 编辑:程序博客网 时间:2024/06/05 13:13
/** * Created by yuyufeng on 2016/11/23. * 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 */public class QuickSort { //我使用了两边向推进找值对比pivot交换 public static void sort(int left, int right, int[] arr) { int tempValue; int l = left; int r = right; //取得中间数标的值 int pivot = arr[(left + right) / 2]; //快速排序优化的关键点就在于划分算法,我们这里不做处理就取中间值 while (l < r) { //找到左边比pivot大的坐标 while (arr[l] < pivot && l < r) { l++; } //同上 while (arr[r] > pivot && l < r) { r--; } //如果l>=r,则说明左边的值都小于右边的值了,二分已经完毕,那就不用交换,故直接break即可。 if (l >= r) { break; } //交换 tempValue = arr[l]; arr[l] = arr[r]; arr[r] = tempValue; } //l==r 则说明两边查找进度已经重叠,该值为pivot的坐标,排序位置已经确定,故不需要再参与二分。 if (l == r) { l++; r--; } //递归 //当前数组左边区间继续二分 if (left < r) { sort(left, r, arr); } //当前数组右边继续区间二分 if (l < right) { sort(l, right, arr); } //如果left == r,right == l 则说明二分区间已经为0了,排序完毕,递归出口 } public static void main(String[] args) { int[] myArr = {2, 5, 4, 9, 3, 6, 8, 7, 1, 0}; sort(0, myArr.length - 1, myArr); for (int i = 0; i < myArr.length; i++) { System.out.print(myArr[i] + " "); } System.out.println(); }}/** * 排序过程(递归): * 2 5 4 9 3 6 8 7 1 0 * 2 0 1 3 9 6 8 7 4 5 * 0 2 1 3 9 6 8 7 4 5 * 0 1 2 3 9 6 8 7 4 5 * 0 1 2 3 5 6 4 7 8 9 * 输出结果: * 0 1 2 3 4 5 6 7 8 9 **/
1 0
- 排序算法——快速排序详解(java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法—快速排序详解
- Java实现排序算法——快速排序
- 排序算法之快速排序、归并排序(java实现)
- 排序算法--交换排序(冒泡排序、快速排序、随机快速排序)java实现
- Java实现数组的快速排序(快速排序算法)
- Java排序算法——快速排序
- 快速排序算法Java详解
- 排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序
- 《排序算法》——快速排序(Java)
- 排序算法(Java语言)——快速排序
- 快速排序算法(java实现)
- 快速排序算法(C & Java 实现)
- 算法1-快速排序(java实现)
- 快速排序算法(java实现)
- Java快速排序(QuickSort)算法实现
- iOS_NSSet与NSArray的区别
- Activity 全屏设置
- python中reload(module)的用法
- 20. Valid Parentheses--合法的括号组合(使用stack)
- 一个相对较难需求的实现
- 排序算法——快速排序详解(java实现)
- zookeeper应用陷阱
- N阶楼梯-计数
- [Wondgirl] 微信小程序(一)简介
- Tesseract:安装与命令行使用
- 文章中的代码添加语法高亮
- 汉字的unicode编码最小值
- thinkphp——上传图片
- Extjs 实现menu居中效果(仿弹窗)