【java数据结构】快速排序

package quicklySort;

public class QuicklySort {
    /**
     * 获取枢纽下标
     * @param arr
     * @param left
     * @param right
     * @return
     */
    private static int getStart(int arr[],int left,int right) {
        int temp = arr[left];//选一个值作为中间值作为枢纽
        while(left<right) {//从右向左找比temp小的
            while(arr[right] >= temp && left < right) {
                right--;
            }
            if(left<right) {
                arr[left] = arr[right];//将比temp小的放在低端
                left++;
            }
            while(arr[left] <= temp && left < right) {//从左向右找比temp大的
                left++;
            }
            if(left<right) {
                arr[right] = arr[left];//将比temp大的放在高端
                right--;
            }
        }
        arr[left] = temp;//当left = right时,将中间值放下    
        return left;//返回枢纽下标
    }
    /**
     * 快速排序
     * @param arr
     * 待排序数组
     * @param left
     * 起点
     * @param right
     * 终点
     */
    public static void quickSort(int[] arr,int left,int right) {
        if(left < right) {
            int s = getStart(arr,left,right);
            quickSort(arr, left, s-1);
            quickSort(arr, s+1, right);
        }
    }
    /**
     * 快速排序
     * @param arr
     * 待排序数组
     */
    public static void quickSort(int[] arr) {
        int left = 0;
        int right = arr.length-1;
        if(left < right) {
            int s = getStart(arr,left,right);
            quickSort(arr, left, s-1);
            quickSort(arr, s+1, right);
        }
    }
}
posted @ 2017-08-10 15:15  SEC.VIP_网络安全服务  阅读(71)  评论(0编辑  收藏  举报