• 快速排序


    public class QuickSortUtil {
    
        public static void sort(int[] array) {
            sort(array, 0, array.length - 1);
        }
    
        private static void sort(int[] array, int start, int end) {
            if (end - start <= 10) {
                insertSort(array, start, end);
            } else {
                int pivot = getPivot(array, start, end);
                int partion = partionArray(array, start, end, pivot);
                sort(array, start, partion - 1);
                sort(array, partion + 1, end);
            }
        }
    
        private static void insertSort(int[] array, int start, int end) {
            for (int out = start + 1; out <= end; out++) {
                int temp = array[out];
                int in;
                for (in = out;in > start && array[in - 1] >= temp;in--) {
                    array[in] = array[in - 1];              
                }
                array[in] = temp;
            }
        }
    
        private static int getPivot(int[] array, int start, int end) {
            int center = (start + end) / 2;
            if (array[start] > array[end]) {
                swap(array, start, end);
            }
            if (array[start] > array[center]) {
                swap(array, start, center);
            }
            if (array[center] > array[end]) {
                swap(array, center, end);
            }
            swap(array, center, end - 1);
            return array[end - 1];
        }
    
        private static int partionArray(int[] array, int start, int end, int pivot) {
            int pl = start;
            int pr = end - 1;
            while (true) {
                while (array[++pl] < pivot);
                while (array[--pr] > pivot);
                if (pl >= pr) {
                    break;
                } else {
                    swap(array, pl, pr);
                }
            }
            swap(array, pl, pr - 1);
            return pl;
        }
    
        private static void swap(int[] array, int left, int right) {
            int temp = array[left];
            array[left] = array[right];
            array[right] = temp;
        }
    
    }

  • 相关阅读:
    JAVA多线程与并发学习总结
    Java虚拟机类加载机制
    2013网易校园招聘笔试题
    人人网面试题
    2010人人网校园招聘笔试题
    2011人人网校园招聘笔试题
    2012人人网校园招聘笔试题
    2013人人网校园招聘笔试题
    海量数据查找唯一数据问题
    Hulu面试题
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276318.html
Copyright © 2020-2023  润新知