归并排序:时间复杂度O(nlogn),分的时间复杂度O(logn),合并的过程的复杂度是O(n)
作者:god-jiang
链接:https:
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import java.util.Arrays;
public class MergeSort {
public static void MergeSort(int[] arr, int start, int end) {
if (start >= end) {
return;
}
int mid = start + ((end - start) >> 1);
MergeSort(arr, start, mid);
MergeSort(arr, mid + 1, end);
Merge(arr, start, mid, end);
}
public static void Merge(int[] arr, int start, int mid, int end) {
int[] temp = new int[end - start + 1];
int p1 = start;
int p2 = mid + 1;
int p = 0;
while (p1 <= mid && p2 <= end) {
if (arr[p1] > arr[p2]) {
temp[p++] = arr[p2++];
} else {
temp[p++] = arr[p1++];
}
}
while (p1 <= mid) {
temp[p++] = arr[p1++];
}
while (p2 <= end) {
temp[p++] = arr[p2++];
}
for (int i = 0; i < temp.length; i++) {
arr[i + start] = temp[i];
}
}
public static void main(String[] args) {
int[] a = {2, 4, 6, 1, 3, 7, 9, 8, 5};
MergeSort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
}