Sort Integers II

public class Solution {
    /**
     * @param A: an integer array
     * @return: nothing
     */
		public void sortIntegers2(int[] A) {
			if (A == null) return;
			helper(A, 0, A.length - 1);
		}
		
		private void helper(int[] A, int left, int right) {
			if (left >= right) {
				return;
			}
			
			int pivot = A[left + (int)(Math.random() * (right - left)];    //选 pivot 套路
			int i = left, j = right;
			
			while (i <= j) {
				while (i <= j && A[i] < pivot) {
					i++;
				}
		
				while (i <= j && A[j] > pivot) {
					j--;
				}
			
				if (i <= j) {
					int t = A[i];
					A[i++] = A[j];
					A[j--] = t;
				}
			}
			helper(A, left, j);
			helper(A, i, right);
		}
}



Time Complexity : O(nlogn) → 最坏的情况下是 n^2
Space Complexity : O(logn) 平均情况 - 递归的过程中需要空间消耗
			- O(n) 最坏情况

最后更新于

这有帮助吗?