归并排序
Posted pipipi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
归并排序(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]; } } }
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章