Sort

直接写,别BB

Merge Sort, Quick Sort and Heap Sort

Merge Sort

Divide & Conquer

/**
 * Merge Sort.
 */
public void mergeSort(int[] nums) {
    int[] tmp = new int[nums.length];
    mergeSort(nums, tmp, 0, nums.length - 1);
}

private void mergeSort(int[] nums, int[] tmp, int start, int end) {
    if (start >= end) {
        return;
    }

    // divide
    int mid = start + (end - start) / 2;
    mergeSort(nums, tmp, start, mid);
    mergeSort(nums, tmp, mid + 1, end);

    // merge
    int index = start;
    int leftStart = start;
    int rightStart = mid + 1;

    while (leftStart <= mid && rightStart <= end) {
        if (nums[leftStart] <= nums[rightStart]) {
            tmp[index++] = nums[leftStart++];
        } else {
            tmp[index++] = nums[rightStart++];
        }
    }

    while (leftStart <= mid) {
        tmp[index++] = nums[leftStart++];
    }

    while (rightStart <= end) {
        tmp[index++] = nums[rightStart++];
    }

    for (int i = start; i <= end; i++) {
        nums[i] = tmp[i];
    }
}

Quick Sort

Heap Sort

Last updated