快速排序 Java
来源:互联网 发布:eve online for mac 编辑:程序博客网 时间:2024/06/01 07:48
1 排序原理
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。其为冒泡排序的优化
2 时间复杂度
O(logn*n) 最坏时间复杂度:O(n^2)
3 实现
/** * 快速排序 * * @author xld * */public class QuickSort { public static void sort(int[] arr) { int n = arr.length; sort(arr, 0, n - 1); } private static void sort(int[] arr, int l, int r) { if (l > r) return; int p = partition(arr, l, r); sort(arr, l, p -1); sort(arr, p + 1, r); } private static int partition(int[] arr, int l, int r) { int v = arr[l]; // arr[l+1...j] < v ; arr[j+1...i) > v // 索引j分区 ,j之前的索引为小于arr[v]的元素,大于j的索引为大于arr[v]的元素 int j = l; for (int i = l+1; i <= r; i++) { // 如果arr[i]小于v 则将其转移到j之前的位置 如果大于,则不用动,因为j到i-1为大于arr[v]的位置 if (arr[i] < v) { j++; swap(arr, j, i); } // 最后 将l-->即表定点 和最后一个小于v的元素交换位置 } swap(arr, l, j); // 返回v表定点的下标 作为下次分组的节点 return j; } private static void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } // 测试InsertionSort public static void main(String[] args) { int[] arr = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; QuickSort.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); System.out.print(' '); } System.out.println(); }}
阅读全文
1 0
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- webpack--概念9--模块热替换
- Java关于 反射 的一些整理
- curl不能支持https问题
- 4.4、 Shell编程中数组、date和cal命令
- strace命令基本用法
- 快速排序 Java
- 区块链原理学习之二-私钥公钥和地址
- MySQL 数据备份与还原
- thinkphp5.0 volist
- 关于CAShapeLayer的一些实用案例和技巧
- include动作与指令的区别
- 字典树排序(思路分析)
- NIO就这些知识吗?
- 多线程学习(一)什么是多线程?