参考的文章:
(1)这或许是东半球讲十大排序算法最好的一篇文章
(2)排序算法 - 面试中的排序算法总结
(3)必学十大经典排序算法,看这篇就够了
算法
(1)归并排序的核心思想是分治,分而治之,将一个大问题分解成无数的小问题进行处理,处理之后再合并,这里我们采用递归来实现;
(2)时间复杂度O(nlogn)
代码1-递归
/**
* 正确的递归写法
*
* @param arr
* @param left
* @param right
* @return
*/
public int[] mergeSort2(int[] arr, int left, int right) {
// 如果 left == right,表示数组只有一个元素,则不用递归排序
if (left < right) {
// 把大的数组分隔成两个数组
int mid = (left + right) / 2;
// 对左半部分进行排序
arr = mergeSort2(arr, left, mid);
// 对右半部分进行排序
arr = mergeSort2(arr, mid + 1, right);
//进行合并
merge2(arr, left, mid, right);