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
| public class MergeSort { public static void main(String[] args) { int[] arr = {3, 2, 7, 11, 5, 8, 10, 1, 4}; int[] tempArr = new int[arr.length]; mergesort(arr, tempArr, 0, arr.length - 1); String s = Arrays.toString(arr); System.out.println(s); }
public static void mergesort(int[] arr, int[] tempArr, int left, int right) { if (left < right) { int middle = (right - left) / 2 + left; mergesort(arr, tempArr, left, middle); mergesort(arr, tempArr, middle + 1, right); merge(arr, tempArr, left, middle, right); } }
public static void merge(int[] arr, int[] tempArr, int left, int middle, int right) { int l_pos = left; int r_pos = middle + 1; int pos = left;
while (l_pos <= middle && r_pos <= right) { if (arr[l_pos] < arr[r_pos]) { tempArr[pos++] = arr[l_pos++]; } else { tempArr[pos++] = arr[r_pos++]; } } while (l_pos <= middle) { tempArr[pos++] = arr[l_pos++]; } while (r_pos <= right) { tempArr[pos++] = arr[r_pos++]; } while (left <= right) { arr[left] = tempArr[left]; left++; } System.out.println(" 排序中:" + Arrays.toString(arr)); } }
|