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 81 82 83 84 85 86 87
| ```
## 归并排序
写法一:参考:数据结构与算法分析:Java语言描述 - Mark Allen Weiss
```java public class MergeSort<T extends Comparable<T>> extends Sort<T> {
@Override public void sort(T[] arr) { @SuppressWarnings("unchecked") T[] temp = (T[]) new Comparable[arr.length]; mergeSort(arr, temp, 0, arr.length - 1); }
private void mergeSort(T[] arr, T[] temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; mergeSort(arr, temp, left, mid); mergeSort(arr, temp, mid + 1, right); merge(arr, temp, left, mid + 1, right); } }
private void merge(T[] arr, T[] temp, int leftPos, int rightPos, int rightEnd) { int size = rightEnd - leftPos + 1; int leftEnd = rightPos - 1; int tempPos = leftPos; while (leftPos <= leftEnd && rightPos <= rightEnd) { if (arr[leftPos].compareTo(arr[rightPos]) <= 0) { temp[tempPos++] = arr[leftPos++]; } else { temp[tempPos++] = arr[rightPos++]; } } while (leftPos <= leftEnd) { temp[tempPos++] = arr[leftPos++]; } while (rightPos <= rightEnd) { temp[tempPos++] = arr[rightPos++]; } for (int i = 0; i < size; i++, rightEnd--) { arr[rightEnd] = temp[rightEnd]; } }
public static void main(String[] args) { MergeSort<Integer> mergeSort = new MergeSort<Integer>(); Integer[] nums = { 2, 3, 1, -5, 2, 3, 9 }; System.out.println(mergeSort.isSorted(nums)); mergeSort.sort(nums); System.out.println(mergeSort.isSorted(nums)); System.out.println(Arrays.toString(nums)); } }
|