排序算法之归并排序

来源:互联网 发布:武林外传武功排名 知乎 编辑:程序博客网 时间:2024/06/15 23:37

时间复杂度:平均O(nlogn)  最好O(nlogn)  最坏O(nlogn)

空间复杂度:O(n)

稳定性:稳定

特点:n大时较好

public class MergeSort {public static void main(String[] args) {int[] arr = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };sort(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr, int low, int high) {int mid = (low + high) >> 1;if (low < high) {// 左边sort(arr, low, mid);// 右边sort(arr, mid + 1, high);// 左右归并merge(arr, low, mid, high);}}public static void merge(int[] arr, int low, int mid, int high) {int[] temp = new int[high - low + 1];int i = low;// 左指针int j = mid + 1;// 右指针int k = 0;// 把较小的数先移到新数组中while (i <= mid && j <= high) {if (arr[i] < arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}// 把左边剩余的数移入数组while (i <= mid) {temp[k++] = arr[i++];}// 把右边边剩余的数移入数组while (j <= high) {temp[k++] = arr[j++];}// 把新数组中的数覆盖arr数组for (int k2 = 0; k2 < temp.length; k2++) {arr[k2 + low] = temp[k2];}}}


0 0
原创粉丝点击