import java.util.*;

public class Solution {
    public int[] MySort (int[] arr) {
        // 预处理
        if (arr == null || arr.length == 0) return arr;

        // 对数组进行快速排序
        quickSort(arr, 0, arr.length-1);
        return arr;
    }

    // 快速排序
    public static void quickSort(int[] arr, int start, int end) {
        // 预处理
        if (start >= end) return;

        // 划分
        int pivotPos = partition(arr, start, end);
        // 递归处理左右子数组
        quickSort(arr, start, pivotPos-1); // 划分左子数组
        quickSort(arr, pivotPos+1, end);   // 划分右子数组
    }

    // 用首元素将序列划分成左右两个部分
    public static int partition(int[] arr, int start, int end) {
        // 取首元素作为中枢
        int pivot = arr[start];
        // 确定中枢的最终位置
        while (start < end) {
            // 小于中枢的移动到左侧
            while (start < end && arr[end] >= pivot) end--;
            arr[start] = arr[end];
            // 大于中枢的移动到右侧
            while (start < end && arr[start] <= pivot) start++;
            arr[end] = arr[start];
        }
        // 循环结束,此时start == end,此位置即为中枢的最终位置
        arr[start] = pivot;
        // 返回中枢的最终位置
        return start;
    }
}