1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
import java.lang.reflect.Array; import java.util.Arrays;
public class MergeSort {
private MergeSort(){}
public static <E extends Comparable<E>> void sort(E[] arr){ sort(arr, 0 , arr.length-1); }
private static <E extends Comparable<E>>void sort(E[] arr, int l , int r){ if(l >= r) return;
int mid = (l + r ) / 2; sort(arr, l, mid); sort(arr, mid+1, r); merge(arr, l , mid , r); }
private static <E extends Comparable<E>> void merge(E[] arr, int l , int mid, int r){
E[] temp = Arrays.copyOfRange(arr, l , r + 1);
int i = l, j = mid + 1;
for(int k = l ; k <= r ; k ++){
if(i > mid) { arr[k] = temp[j - l]; j ++; } else if(j > r){ arr[k] = temp[i - l]; i ++; } else if(temp[i - l].compareTo(temp[j - l]) <= 0){ arr[k] = temp[i - l]; i ++; } else{ arr[k] = temp[j - l]; j ++; }
} }
public static void main(String[] args){
int n = 100000; Integer[] arr = ArrayGenerator.generateRandomArray(n, n); MergeSort.sort(arr); for(int i = 0 ; i < n ; i++){ System.out.println(arr[i]); } } }
|
评论