代码如下
public void mergeSort(int f[], int l, int u) {
// the algorithm of merge sorting
if (l + 1 < u) {
int mid = (l + u) / 2;
mergeSort(f, l, mid);
mergeSort(f, mid, u);
merge(f, l, mid, u);
}
}
public void merge(int arr[], int l, int m, int r) {
// the algorithm of merging
int[] temp = new int[r - l + 1];
int i = 0, j = 0, k = 0;
// declare variable for counting
if (r - l == 1) {
int min = Math.min(arr[l], arr[r]);
int max = Math.max(arr[l], arr[r]);
arr[l] = min;
arr[r] = max;
}
// the situation that there are only two numbers
else {
while (l + i < m && m + j < r) {
if (arr[l + i] < arr[m + j]) {
temp[k] = arr[l + i];
k += 1;
i += 1;
} else {
temp[k] = arr[m + j];
k += 1;
j += 1;
}
}
while (l + i < m) {
temp[k] = arr[l + i];
k += 1;
i += 1;
}
while (m + j < r) {
temp[k] = arr[m + j];
k += 1;
j += 1;
}
for (int n = 0; n < temp.length - 1; n++) {
arr[l + n] = temp[n];
}
}
}