快速排序

来源:互联网 发布:淘宝达人申请理由简述 编辑:程序博客网 时间:2024/05/20 14:43
/** * 快排 *  * */public class FastSort {    /**     * 两边排序     *      * @param arr     * @param start     * @param end     */    public static void FSort(int[] arr, int start, int end) {        if (start >= end)            return;        int pos = FindPos(arr, start, end);        FSort(arr, start, pos - 1);        FSort(arr, pos + 1, end);    }    /**     * 交换arr[i]和arr[j]的位置     *      * @param arr     * @param i     * @param j     */    public static void swap(int[] arr, int i, int j) {        int t = arr[i];        arr[i] = arr[j];        arr[j] = t;    }    /**     * 按基准点排序     *      * @param arr     * @param start     * @param end     * @return     */    public static int FindPos(int[] arr, int start, int end) {        int base = arr[start];        int i = start;        int j = end + 1;        while (true) {            while (arr[++i] < base && i < end)                ;            while (arr[--j] > base)                ;            if (i >= j)                break;            swap(arr, i, j);        }        arr[start] = arr[j];        arr[j] = base;        return j;    }    public static void main(String[] args) {        int[] arr = { 7, 2, 1, 20, 9, 0, 8 };        FSort(arr, 0, arr.length - 1);        for (int i : arr) {            System.out.print(i + " ");        }    }}
public class QuickSort {    /**     * 快速排序     * 1.基准元素为第一个元素,i为第一个元素的下标,j为最后一个元素的下标     * 2.j向前找,找到比基准元素值小的,赋值给j的位置;i向后找,找到比基准元素大的值,赋值给i的位置     * 3.i>=j的时候停止,基准元素左右两边分别重复上面步骤     */    public static int QSort(int start,int end,int[] arr){        int base=arr[start];//基点值        while(start<end){            while(arr[end]>=base&&start<end){                end--;              }            arr[start]=arr[end];            while(arr[start]<=base&&start<end){                start++;            }            arr[end]=arr[start];        }        arr[start]=base;        return start;    }    public static void EndSort(int start,int end,int[] arr){        if(start>=end){            return;        }        int position = QSort(start,end,arr);        EndSort(start, position-1, arr);        EndSort(position+1, arr.length-1, arr);    }    public static void main(String[] args) {        // TODO Auto-generated method stub        int arr[]={7,9,5,4,6};        EndSort(0,arr.length-1,arr);     for(int i=0;i<arr.length;i++){        System.out.print(arr[i]+" ");        }    }}