java算法之归并排序

xiaoxiao2021-02-28  90

基本思想 待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 代码

public class MergeSort { public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1); } public static int[] sort(int[] arr, int low, int high) { int mid = (low + high) / 2; if (low < high) { // 左边 sort(arr, low, mid); // 右边 sort(arr, mid + 1, high); // 左右归并 merge(arr, low, mid, high); } return arr; } 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]; } } public static void main(String[] args) { int[] a = new int[] { 49, 38, 65, 97, 76, 13, 27, 50 }; mergeSort(a); for (int i : a) System.out.print(i + " "); } }

时间复杂度 O(nlgn)

转载请注明原文地址: https://www.6miu.com/read-67586.html

最新回复(0)