Java归并排序

48 阅读1分钟

public class test1 { public void merge(int []a, int left, int mid, int right) { int []tmp = new int[a.length]; int p1 = left, p2 = mid + 1, k = left; while (p1 <= mid && p2 <= right) { if (a[p1] <= a[p2]) { tmp[k++] = a[p1++]; } else { tmp[k++] = a[p2++]; } } while (p1 <= mid) { //如果第一个序列未检测完,直接将后面所有元素加到合并的序列中 tmp[k++] = a[p1++]; } while (p2 <= right) { tmp[k++] = a[p2++]; } //复制原来数组 for (int i = left; i <= right; i++) { a[i] = tmp[i]; } } public void mergeSort(int[] a, int start, int end) { if (start < end) { int mid = (start + end) / 2; mergeSort(a, start, mid); mergeSort(a, mid + 1, end); merge(a, start, mid, end); } } @Test public void test3() { System.out.println("hello"); int[] a = {49, 38, 65, 97, 76, 13, 27, 50}; mergeSort(a, 0, a.length - 1); System.out.println("ok to sort by time"); for (int e : a) { System.out.print(e + " "); } } }

本文使用 文章同步助手 同步