add merge sort

dev
ehlxr 2020-10-04 22:12:05 +08:00
parent f10cb74205
commit 91d6940619
1 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,69 @@
package me.ehlxr.sort;
import java.util.Arrays;
/**
*
* <p>
*
*
*
* @author ehlxr
* @since 2020-10-04 21:09.
*/
public class MergeSort {
public static void main(String[] args) {
int[] arr = {4, 9, 1, 8, 6, 2};
// merge(new int[]{1, 4, 9}, new int[]{2, 6, 8});
System.out.println(Arrays.toString(sort(arr)));
}
/**
* . floor (n/2)
* . floor (n/4)
* .
*/
public static int[] sort(int[] arr) {
if (arr.length <= 1) {
return arr;
}
// arr.length/2
int num = arr.length >> 1;
int[] left = Arrays.copyOfRange(arr, 0, num);
int[] right = Arrays.copyOfRange(arr, num, arr.length);
return merge(sort(left), sort(right));
}
/**
*
*/
public static int[] merge(int[] arr1, int[] arr2) {
int l1 = 0;
int l2 = 0;
int i = 0;
int[] r = new int[arr1.length + arr2.length];
while (l1 < arr1.length || l2 < arr2.length) {
if (l1 >= arr1.length) {
r[i++] = arr2[l2];
l2++;
continue;
}
if (l2 >= arr2.length) {
r[i++] = arr1[l1];
l1++;
continue;
}
if (arr1[l1] < arr2[l2]) {
r[i++] = arr1[l1];
l1++;
} else {
r[i++] = arr2[l2];
l2++;
}
}
return r;
}
}