题目描述

给定一个数组,请你编写一个函数,返回该数组排序后的形式。

 

示例1

输入

[5,2,3,1,4]

返回值

[1,2,3,4,5]

示例2

输入

[5,1,6,2,5]

返回值

[1,2,5,5,6]

 

快速排序是由冒泡排序改进而得到的,是一种分区交换排序方法。思想如下:
一趟快速排序采用从两头向中间扫描的方法,同时交换与基准记录逆序的记录。

public class MySortMe {
    public static void main(String[] args) {
        MySortMe mySortMe = new MySortMe();

        //int[] arr = {5,2,3,1,3};
        int[] arr = {1,4,7,2,5,3,9};
        mySortMe.MySort(arr);
    }

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {

        if(null == arr){
            return null;
        }

        quicksort(arr,0, arr.length-1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        return arr;
    }

    // 使用快速排序
    private void quicksort(int[] arr, int start, int end){
        if(start >= end){
            return;
        }

        int base = arr[start];
        int i = start+1;
        int j = end;

        // 5,2,3,1,3
        // 3 2 3 1 5
        while(i<=j){
            while(i<=j && arr[i]<=base){
                i++;
            }

            while(j >= i && arr[j] > base){
                j--;
            }

            if(i < j){ 
                swap(arr, i, j);
            }
         }

        swap(arr,start,j);

        quicksort(arr, start, j-1);
        quicksort(arr, j+1,end);
    }

    private void swap(int[] arr, int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}