merge是建立在归并操作上的一种有效的排序算法。它将多个排序列表作为输入并生成单个列表作为输出,包含按排序顺序排列的输入列表的所有元素。
merge是建立在归并操作上的一种有效的排序算法。它将多个排序列表作为输入并生成单个列表作为输出,包含按排序顺序排列的输入列表的所有元素。
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。
如 设有数列{6,202,100,301,38,8,1}
初始状态: 比较次数
i=1 3
i=2 4
i=3 4
总计: 11次代码
package sort;import static sort.SortUtils.print;class MergeSort implements SortAlgorithm { public <T extends Comparable<T>> T sort(T unsorted) { T tmp = (T) new Comparable; doSort(unsorted, tmp, 0, unsorted.length - 1); return unsorted; } private static <T extends Comparable<T>> void doSort(T arr, T temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; doSort(arr, temp, left, mid); doSort(arr, temp,mid + 1, right); merge(arr, temp, left, mid, right); } } private static <T extends Comparable<T>> void merge(T arr, T temp, int left, int mid, int right) { System.arraycopy(arr, left, temp, left, right - left + 1); int i= left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (temp.compareTo(temp) <= 0) { arr = temp; i++; } else { arr = temp; j++; } k++; } while (i <= mid) { arr = temp; i++; k++; } while (j <= right) { arr = temp; j++; k++; } } public static void main(String args) { // Integer Input Integer arr = {4, 23, 6, 78, 1, 54, 231, 9, 12}; MergeSort mergeSort = new MergeSort(); mergeSort.sort(arr); // Output => 1 4 6 9 12 23 54 78 231 print(arr); // String Inpu String stringArray = {"c", "a", "e", "b","d"}; mergeSort.sort(stringArray); //Output => a b c d e print(stringArray); }}