java归并排序
1、算法思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分:问题分成一些小的问题然后递归求解,治:的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。将序列递归拆半分成多个子序列,再将各个子序列排序后归并叠加,最后归并所有子序列,排序完成。
2、算法过程
举个栗子(第一趟的排序过程)
原始序列:49、38、65、97、76、13、27
1)将原始序列看成7个只含一个元素的子序列,此时序列都是有序的
子序列1:49
子序列2:38
子序列3:65
子序列4:97
子序列5:76
子序列6:13
子序列7:27
2)两两归并,形成若干有序二元组,序列1和序列2归并,序列3和序列4归并…
结果:{38、49、}{65、97、}{13、76、}{27}
3)将这个序列看成若干二元组子序列
子序列1:38 49
子序列2:65 97
子序列3:13 76
子序列4:27
4)两两归并,形成若干有序四元组
结果:{38、49、65、97、}{13、27、76}
5)最后仅有两个子序列再次两两归并,完成最终排序
结果:{13、27、38、49、65、76、97}
public class Mergesort {
static int[] merge = {4,5,3,6,2,5,1};
static int[] temp = new int[7];
public static void main(String[] args) {
mergesort(0,6);
System.out.println(Arrays.toString(merge));
}
public static void mergesort(int l,int r){
if (l<r){
int middle = (l+r)/2;
mergesort(l,middle);
mergesort(middle+1,r);
merge(l,r,middle+1);
}
}
public static void merge(int l,int r,int middle){
int m = l;
int n = middle;
int p = l;
while (m<middle && n<=r){
if (merge[m]<merge[n])
temp[p++]=merge[m++];
else
temp[p++]=merge[n++];
}
while (m<middle){
temp[p++]=merge[m++];
}
while (n<=r){
temp[p++]=merge[n++];
}
p=l;
m=l;
while (p<=r){
merge[m++]=temp[p++];
}
}
}