java排序之快速排序(三数取中)

package com.test.sort;

public class TestQuickSort {

    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static int partition(int[] array, int lo, int hi) {
        int mid = lo + (hi - lo) / 2;
        if (array[mid] > array[hi])
            swap(array[mid], array[hi]);
        if (array[lo] > array[mid])
            swap(array[lo], array[hi]);
        if (array[lo] > array[hi])
            swap(array[lo], array[hi]);
        int key = array[lo];
        while (lo < hi) {
            while (lo < hi && array[hi] >= key) {
                hi--;
            }
            array[lo] = array[hi];
            while (lo < hi && array[lo] <= key) {
                lo++;
            }
            array[hi] = array[lo];
        }
        array[lo] = key;
        return lo;
    }

    public static void sort(int[] array, int lo, int hi) {
        if (lo > hi)
            return ;
        int index = partition(array, lo, hi);
        sort(array, lo, index - 1);
        sort(array, index + 1, hi);
    }

    public static void printArray(int[] array) {
        System.out.print("{");
        for (int i = 0; i < array.length; i ++) {
            System.out.print(array[i]);
            if (i != array.length - 1) {
                System.out.print(",");
            }
        }
        System.out.print("}");
    }

    public static void main(String[] args) {
        int[] array = {3, 2, 1, 5, 1};
        sort(array, 0 , array.length - 1);
        printArray(array);
    }
} 

猜你喜欢

转载自blog.csdn.net/qq_34561892/article/details/81813746