package lbs;
import java.util.Arrays;
//快速排序
public class Num5 {
    public static void main(String[] args) {
        System.out.println("快速排序:");
        int arr[] = {2,4,1,3,5,7,9,8,6};
        System.out.println(Arrays.toString(arr));
        
        //new Num5().quickSort(arr, 0, arr.length - 1);
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    //用第一个元素将待排序序列划分为左右两个部分
    private static int Partition(int[] arr, int low, int high) {
        int pivot = arr[low];
        while (low < high) {
            while (low < high && arr[high] >= pivot) {
                --high;
            }
            arr[low] = arr[high];
            while (low < high && arr[low] <= pivot) {
                ++low;
            }
            arr[high] = arr[low];
        }
        arr[low] = pivot;
        return low;
    }
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {    //递归跳出的条件low>=high
            int pivotpos = Partition(arr,low,high);
            quickSort(arr,low,pivotpos-1);
            quickSort(arr,pivotpos+1,high);
        }
    }
}
/*第二种方法*/
/*
package lbs;
import java.util.Arrays;
//快速排序
public class Num5 {
    public static void main(String[] args) {
        int[] arr = {5, 2, 6, 9, 1, 3, 4, 8, 7, 10};
        new Num5().quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public void quickSort(int[] arr, int start, int end) {
        if (start >= end)
            return;
        int k = arr[start];
        int i = start, j = end;
        while (i != j) {
            while (i < j && arr[j] >= k)
                --j;
            swap(arr, i, j);
            while (i < j && arr[i] <= k)
                ++i;
            swap(arr, i, j);
        }
        quickSort(arr, start, i - 1);
        quickSort(arr, i + 1, end);
    }
}
*/