zoukankan      html  css  js  c++  java
  • 快速排序

    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;
        }
    
    }

  • 相关阅读:
    指针和数组的关系
    深入学习数组
    const关键字与指针
    野指针是什么
    指针带来的一些符号的理解
    指针的本质
    内存管理之堆
    内存管理之栈
    元类
    断点调式和面向对象进阶
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276318.html
Copyright © 2011-2022 走看看