2.快速排序
来源:互联网 发布:淘宝水印制作 编辑:程序博客网 时间:2024/05/21 09:50
2.快速排序
- 快速排序
- 前言
- 实现思路
- 实现代码
- 运行
前言
快速排序可以说是所有排序算法里最常用、最优秀、最效率的算法。它是冒泡排序的改进版。就像它的名字一样,“快速”!
实现思路
实现思路是非常有趣的:
- 1.先一个基准数(一般选择第一个数。即,index = 0)。
- 2.来个while,从数组最右边开始找比基准数小的数,记录下标为 r。
- 3.在再来个while,从数组最左边开始找比基准数大的数,记录下边为l。
- 4.交换两个数的位置。即下标 r 和下标 l 的数交换。
- 5.当找到r == l 的时候。即,相遇的时候,第一次排序已经完成。此时,必然走到数组的中间的数。
- 6.基准数(index = 0)和 中间数交换。
- 7.此时原来的基准数到了中间,根据原来的基准数切分为两个数组(都不包含原基准素)。
- 8.分别给两个数组做 上诉 1-7 的操作(开始递归)。
实现代码
public <T extends Comparable<T>> void quickSorting(T[] array, int left, int right) { int r, l; if (left > right) return; // 基准数 T temp = array[left]; l = left; r = right; while (l != r) { /** * 要先从右往左找 * 如果比基准数大,就一直找下去,直到找到比基准数小的 */ while ((array[r].compareTo(temp) >= 0) && l < r) r--; /** * 要先从左往右找 * 如果比基准数小,就一直找下去,直到找到比基准数大的 */ while ((array[l].compareTo(temp) <= 0) && l < r) l++; if (l < r) { /** * 交换 */ T t = array[l]; array[l] = array[r]; array[r] = t; } } /** * 基准数与中间位置的数字交换 */ array[left] = array[l]; array[l] = temp; /** * 继续处理左边的,这里是一个递归的过程 */ quickSorting(array, left, l - 1); /** * 继续处理右边的,这里是一个递归的过程 */ quickSorting(array, l + 1, right); }
运行
public static void main(String args[]) { Integer[] object = {26, 19, 7, 37, 27, 57, 67, 99, 87, 17}; QuickSort quickSorting = new QuickSort(); quickSorting.quickSorting(object, 0, object.length - 1); System.out.println("\n快速排序\n"); for (int i : object) { System.out.print(i + " "); } }
0 0
- 2.排序之快速排序
- 2.快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- PHP内置服务器
- 在知乎上看到的一段评论,20-30岁二次发育
- [手游新项目历程]第18天-linux-protobuf+json
- 电梯调度算法
- 怎么在eclipse中使用search搜索所有的文件中的某些特定内容
- 2.快速排序
- http://ibatis.apache.org/dtd/ibatis-3-config.dtd Cause: java.net.ConnectException: Connection timed
- Java程序设计(一)
- java 类加载
- 字符串同数组名是一个地址变量,不能直接赋值,更不能用==来判断两个字符串是否相等
- HDOJ 2717 Catch That Cow(bfs)
- 杭电acm2502
- Android 开发 之 JNI入门 - NDK从入门到精通
- 3.选择排序