Java实现快速排序(泛型)
来源:互联网 发布:阿里云视频点播 编辑:程序博客网 时间:2024/06/15 00:33
算法的原理详见:《坐在马桶上看算法:快速排序》
http://developer.51cto.com/art/201403/430986.htm
package sort;import java.util.Arrays;/** * 快速排序的Java实现 * * @Author: lujin * @Created Date: 2016/8/23 9:23 * @Version 1.0.0 * @LastModify 2016/8/23 9:23 */public class QuickSort { /** * 原地进行快速排序 */ public static <T extends Comparable> void sort(T[] array) { // 入参检查 if (array == null || array.length == 0) { System.out.println("[WARNING] input array to sort is null or emtpy, do nothing as default"); return; } //构造标志变量 int low = 0; int high = array.length - 1; qsort(array, low, high); } /** * 递归形式快速排序 * * @param arr 待排序数组 * @param low 排序的数组下界 * @param high 排序的数组上界 */ public static <T extends Comparable> void qsort(T[] arr, int low, int high) { if (low >= high) return; //递归划分 int pivot = partition(arr, low, high); qsort(arr, low, pivot - 1); qsort(arr, pivot + 1, high); } /** * 按照指定的上下界计算出中轴,中轴满足:左边的元素都小于它,右边的元素都大于它 * * @param arr 待计算的数组 * @param low 参与计算的数组下界 * @param high 参与计算的数组上界 * @return 满足要求的中轴元素 */ public static <T extends Comparable> int partition(T[] arr, int low, int high) { //设置最小值为轴 T pivot = arr[low]; int i = low, j = high; while (i < j) { // 找到右边第比轴小的值 while (j > i && arr[j].compareTo(pivot) >= 0) --j; // 找到左边第比轴大的值 while (i < j && arr[i].compareTo(pivot) <= 0) ++i; // 交互2个值 if (i < j) { T tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } //最终将轴归位 arr[low] = arr[i]; arr[i] = pivot; return i; }}
0 0
- Java实现快速排序(泛型)
- 快速排序实现(JAVA)
- 快速排序(java实现)
- 快速排序(java实现)
- 快速排序(java实现)
- 快速排序实现(Java)
- 快速排序(java实现)
- 快速排序(java实现)
- 快速排序(Java实现)
- 快速排序与堆排序的Java实现(泛型)
- Java实现数组的快速排序(快速排序算法)
- java实现快速排序
- 快速排序Java实现
- 快速排序java实现
- 快速排序JAVA实现
- Java实现快速排序
- 快速排序--Java实现
- 快速排序java实现
- 马尔可夫模型学习
- Java IO ByteArrayInputStream和ByteArrayOutputStream
- Codeforces Round #332 (Div. 2)C. Day at the Beach
- Oracle数据库的学习(一)
- java中的分布式应用(一)之分布式介绍
- Java实现快速排序(泛型)
- LeetCode 338. Counting Bits
- Ubuntu服务器的NVIDIA驱动自动更新所引起的问题及解决方法m
- 笔记--ThinkPHP运行流程
- 正则表达式
- 判断当前rom为MIUI或Flyme或android m
- Android Studio 主题、字体大小的设置
- 《Windows核心编程》之“线程调度和优先级”
- 后缀数组