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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| package com.yukinoshita.algorithm.sort;
import java.util.Arrays; import java.util.Random;
public class MergeSort { public static void main(String args[]) { int[] arr = {8, 5, 3, 7, 6, 2, 4, 1}; int[] temp = new int[arr.length];
System.out.println("排序前:" + Arrays.toString(arr)); mergeSort(arr, 0, arr.length - 1, temp); System.out.println("排序后:" + Arrays.toString(arr));
testPerformance(); }
private static void mergeSort(int[] arr, int left, int right, int[] temp) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid, temp); mergeSort(arr, mid + 1, right, temp); merge(arr, left, right, mid, temp); } }
public static void merge(int[] arr, int left, int right, int mid, int[] temp) { int i = left; int j = mid + 1; int t = 0;
while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[t++] = arr[i++]; } else { temp[t++] = arr[j++]; } }
while (i <= mid) { temp[t++] = arr[i++]; } while (j <= right) { temp[t++] = arr[j++]; }
int k = left; t = 0; while (k <= right) { arr[k++] = temp[t++]; } }
public static void testPerformance() { int size = 900000; int[] arr = new int[size]; int[] temp = new int[size]; Random random = new Random();
for (int i = 0; i < size; i++) { arr[i] = random.nextInt(100000); }
long startTime = System.currentTimeMillis(); mergeSort(arr, 0, arr.length - 1, temp); long endTime = System.currentTimeMillis();
System.out.println("排序大小: " + size); System.out.println("排序时间: " + (endTime - startTime) + " 毫秒"); }
}
|