标签:width data || inf info sort 合并 简单 分数
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
以下为一个简单的数组归并排序过程:
示例代码如下:
package base_algorithm; public class Code4_MergeSort { public static void mergeSort(int[] arr) { if(arr == null || arr.length < 2) { return; } mergeSort(arr, 0, arr.length - 1); } public static void mergeSort(int[] arr, int l, int r) { if(l == r) { return; } int mid = l + ((r - l) >> 1); mergeSort(arr, l, mid); mergeSort(arr, mid + 1, r); //拆分数组 merge(arr, l, mid, r); //两个数组排好序以后归并 } public static void merge(int[] arr, int l, int m, int r) { int[] help = new int[r - l + 1]; int i = 0; int p1 = l; int p2 = m + 1; while(p1 <= m && p2 <= r) { help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++]; //两个有序数组比较,较小的往辅助数组里填 } while(p1 <= m) { help[i++] = arr[p1++]; //当p2大于r以后,把剩下的p1~m的数填入数组 } while(p2 <= r) { help[i++] = arr[p2++]; //当p1>m以后,把剩下的p2~r的数填入数组 } for (i = 0; i < help.length; i++) { arr[l + i] = help[i]; } } }
标签:width data || inf info sort 合并 简单 分数
原文地址:https://www.cnblogs.com/pipipi/p/9427857.html