java数据结构和算法(QuickSort2)

来源:互联网 发布:hlsl知乎 编辑:程序博客网 时间:2024/05/21 10:48
package cn.xyc.sort;import cn.xyc.sortBase.SortBase;import cn.xyc.sortUtil.GetDataUtil;/** *  * 描述:快速排序 *  * <pre> * HISTORY * **************************************************************************** *  ID   DATE           PERSON          REASON *  1    2016年9月20日        80002253         Create * **************************************************************************** * </pre> *  * @author 80002253 * @since 1.0 */@SuppressWarnings("rawtypes")public class QuickSort2 extends SortBase {private static int limit = 15;public static void sortAsc(Comparable[] a) {long s = System.currentTimeMillis();sortAsc(a, 0, a.length - 1);long e = System.currentTimeMillis();System.out.println("快速排序(小数组使用插入排序)使用的时间为:" + (e - s) + "ms");}private static void sortAsc(Comparable[] a, int lo, int hi) {if (hi <= lo) {return;}if (hi - lo <= limit) {for (int i = lo; i <= hi; i++) {// i为未排序的元素,默认0位元素已经排序完成// 遍历的是已经排序完成的部分Comparable temp = a[i];int ins = i;for (int j = i - 1; j >= lo && less(temp, a[j]); j--) {// 移动位置为temp腾出空位a[j + 1] = a[j];ins = j;}// 在ins出插入元素if (ins != i) {a[ins] = temp;}}return;}int partition = partition(a, lo, hi);sortAsc(a, lo, partition - 1);sortAsc(a, partition + 1, hi);}private static int partition(Comparable[] a, int lo, int hi) {int i = lo;int j = hi + 1;Comparable v = a[lo];while (true) {// i先向右移动,直到碰到一个大于lo的元素,此时停止移动,准备和j交换while (less(a[++i], v)) {if (i == hi) {break;}}// j向左移动,直到碰到一个小于lo的元素,此时停止移动,准备和i交换while (less(v, a[--j])) {if (j == lo) {break;}}// i大于等于j时说明相遇了,说明已经遍历完成,退出遍历交换j和lo的位置if (i >= j)break;// 交换i和j的元素的位置,保证lo左边的元素比lo小,右边的元素比lo大exch(a, i, j);}// 交换j和lo的位置exch(a, lo, j);return j;}public static void main(String[] args) {// GenerateDataFileUtil.generate("d:/user/80002253/桌面/a.txt", 1000000);Comparable[] a = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");QuickSort2.sortAsc(a);// show(a);a = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");QuickSort.sortAsc(a);// show(a);}}

0 0