标签:ret rtb return data 分布 位置 esc 数据分布 turn
快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关。
升序排序:
/** * 快速排序 * 升序排序 */ @Override public <T extends Comparable<? super T>> void sortByAsc(T[] data) { if(data == null || data.length <= 1){ return; } partitionSortByAsc(data, 0, data.length - 1); } private <T extends Comparable<? super T>> void partitionSortByAsc(T[] data, int low, int high) { if(low >= high){ return; } /**使用两个指针 start 和 end*/ int start = low; int end = high; T key = data[low]; /**找到key的位置,然后将data分成两部分,分别再次进行递归*/ while(start < end){ while(start < end && data[start].compareTo(key) < 0){ start ++ ; } if(data[start].compareTo(key) > 0){ T temp = data[start]; data[start] = data[end]; data[end] = temp; } while(start < end && data[end].compareTo(key) > 0){ end -- ; } if(data[end].compareTo(key) <= 0){ T temp = data[end]; data[end] = data[start]; data[start] = temp; } } /**左边的*/ if(start > low) partitionSortByAsc(data,low,start - 1); /**右边的*/ if(end < high) partitionSortByAsc(data,end + 1, high); }
降序排序:
/** * 快速排序 * 降序排序 */ @Override public <T extends Comparable<? super T>> void sortByDesc(T[] data) { partitionSortByDesc(data, 0, data.length - 1); } private <T extends Comparable<? super T>> void partitionSortByDesc(T[] data, int low, int high) { if(low >= high){ return; } /**使用两个指针 start 和 end*/ int start = low; int end = high; T key = data[low]; /**找到key的位置,然后将data分成两部分,分别再次进行递归*/ while(start < end){ while(start < end && data[start].compareTo(key) > 0){ start ++ ; } if(data[start].compareTo(key) <= 0){ T temp = data[start]; data[start] = data[end]; data[end] = temp; } while(start < end && data[end].compareTo(key) < 0){ end -- ; } if(data[end].compareTo(key) > 0){ T temp = data[end]; data[end] = data[start]; data[start] = temp; } } /**左边的*/ if(start > low) partitionSortByDesc(data,low,start - 1); /**右边的*/ if(end < high) partitionSortByDesc(data,end + 1, high); }
数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法
标签:ret rtb return data 分布 位置 esc 数据分布 turn
原文地址:http://www.cnblogs.com/Gabby/p/6526321.html