Sort Integers II(整数排序 II)

问题

Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm.
Example
Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5].

分析

使用快速排序,简单对快速排序解释一下。
快速排序每次只能确定一个数的位置。
首先要选一个要排序的数字,暂定为key。这次排序的目的是让左边的全比key小,右边的全比key大。所以我们左边右边同遍历,如果左边比key小就继续,比key大就停下,右边比key大继续,比key小停下,左右交换,当左右相等时,我们就完成了这次排序。
然后再使用递归对key左边的进行排序,对右边的进行排序。

代码

    /**
     * @param A an integer array
     * @return void
     */
    public void sortIntegers2(int[] A) {
        // Write your code here
        if(A==null||A.length==0){
            return;
        }
        tree(A,0,A.length-1);
    }
    private void tree(int[] A, int l,int r){
        if(l>=r){
            return;
        }
        int key=A[l];
        int start=l;
        int end=r;
        while(l<=r){
            while(l<=r&&A[l]key){
                r--;
            }
            if(l<=r){
                int temp=A[l];
                A[l]=A[r];
                A[r]=temp;
                l++;
                r--;
            }
        }
        tree(A,start,r);
        tree(A,l,end);
    }
}

你可能感兴趣的:(Sort Integers II(整数排序 II))