一、普通归并排序
1
public class MergeSort {
2
3
/**
4
* 原地归并排序(每次只将数组分为大和小两部分,并不是完全排序完成。需要递归)
5
*
6
* @param arr
7
* @param lo
8
* @param mid
9
* @param hi
10
*/
11
public void merge(int[] arr, int lo, int mid, int hi) {
12
//1.复制数组
13
int i = lo;
14
int j = mid + 1;
15
int[] temp = new int[arr.length];
16
for (int k = lo; k <= hi; k++) {
17
temp[k] = arr[k];
18
}
19
//2.移动指针进行排序(4种情况)
20
for (int k = lo; k <= hi; k++) {
21
if (i > mid) {
//2.1 左边用尽
22
arr[k] = temp[j++];
23
} else if (j > hi) {
//2.2 右边用尽
24
arr[k] = temp[i++];
25
} else if (temp[j] < temp[i]) {
//2.3 左边大于右边