Meger Sort 也是一种比较常用的算法。这种算法的时间复杂度是O(nlogn),时间复杂度虽然比quick sort要好,但是该算法的空间复杂度为O(n), but quick sort is O(1), 所有快速排序算法又叫做原地排序算法,整合排序算法的是一种先局部后整体的方法,与快速排序的过程正好相反。但是整合排序是一种稳定的排序算法。可是由于整合排序和算法的空间复杂素非常大,所以该方法在数组排序的方法中使用的频率远远不如快速排序使用的多。
merge sort算法也是借助divide conquer的方式进行处理的。
通过lintcode的sort integer ii这道题目进行代码的实现
description:
Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm.
Have you met this question in a real interview? Yes
Example
Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5].
public class Solution {
/**
* @param A an integer array
* @return void
*/
public void sortIntegers2(int[] A) {
// Write your code here
int start = 0;
int end = A.length - 1;
int[] temp = new int[A.length];
megerUtil(A, temp, start, end);
}
private void megerUtil(int[] A, int[] temp, int start, int end) {
if (start >= end) {
return;
}
int mid = (start + end) / 2;
int left = start;
int right = end;
megerUtil(A, temp, start, mid);
megerUtil(A, temp, mid + 1, end);
meger(A, temp, start, mid, end);
}
private void meger(int[] A, int[] temp, int start, int mid, int end) {
int left = start;
int right = mid + 1;
int index = start;
while (left <= mid && right <= end) {
if (A[left] < A[right]) {
temp[index++] = A[left++];
} else {
temp[index++] = A[right++];
}
}
while (left <= mid) {
temp[index++] = A[left++];
}
while (right <= end) {
temp[index++] = A[right++];
}
for (int i = start; i <= end; i++) {
A[i] = temp[i];
}
}
}