**原理:归并排序就是将一个数组分成两个子数组,将两个子数组分成四个子数组,直到每个数组拆分成一个一个 在将其进行归并
**
在这里插入代码片/**
* ClassName: Code4_mergeSort
* Package: PACKAGE_NAME
* Description:
*
* @Author yang shen
* @Create 2024/1/17 10:35
* @Version 1.0
*/
public class Code4_mergeSort {
public static void mergeSort(int[] arr) {
if (arr == null || arr.length < 2) return;
mergeSort(arr, 0, arr.length - 1);
}
public static void mergeSort(int[] arr, int l, int r) {
if (l == r) return;
int mid = l + ((r - l) >> 1);
mergeSort(arr,l,mid);
mergeSort(arr,mid + 1,r);
merge(arr, l ,mid, r);
}
public static void merge(int[] arr, int l, int m, int r) {
int[] help = new int[r - l + 1];
int i = 0;
int p1 = l;
int p2 = m + 1;
while (p1 <= m && p2 <= r) {
help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while (p1 <= m) {
help[i++] = arr[p1++];
}
while (p2 <= r) {
help[i++] = arr[p2++];
}
for (int j = 0; j < help.length; j++) {
arr[l + j] = help[j];
}
}
public static void printArray(int[] arr) {
for(int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {5,2,3,1,4};
mergeSort(arr);
printArray(arr);
}
}