java中的归并排序简单的说就是由小到大的排序(大问题小规模化),然后处理。
举例说明:
12 ,1 ,4 ,0 ,45 ,21 ,6
我们对于这个数组表排序,首先我们两个为一组,然后组内有序
我们一般在代码实现时会有定义start1 和end1 ,start2和end2来标识,我们来进行
第一次归并:
一小块排序:
然后将s1,e1,s2,e2向下一块赋予,让s1=e2+1,e1 =s1+ 块长+1,s2=e1+1,e2
= s2+块长+1;然后完成总排序。
第二次排序:
排序前:
排序后:
第三次排序:
排序前:
排序后:
至此,归并排序就全部结束了。
代码实现:
public static void merge(int array[],int gap){
int start1 = 0;
int end1 = start1+gap-1;
int start2 = end1+1;
int end2 = start2+gap-1 < array.length-1?start2+gap-1:array.length-1;
//排序
int []tmpArr = new int [array.length];
int i = 0;
while(start2 < array.length){
//比较元素 s1 s2 s1++ s2++
while(start1<=end1 && start2<=end2){
if(array[start1] < array[start2]){
tmpArr[i++] = array[start1];
start1++;
}else{
tmpArr[i++] = array[start2];
start2++;
}
}
while(start1 <= end1){
tmpArr[i++] =array[start1++];
}
while(start2<=end2){
tmpArr[i++] =array[start2++];
}
start1 = end2+1;
end1 = start1+gap-1;
start2 = end1+1;
end2 = start2 + gap-1<array.length-1?start2+gap-1:array.length-1;
}
while(start1 <array.length){
tmpArr[i++] =array[start1++];
}
for(int j = 0;j< tmpArr.length;j++){
array[j] = tmpArr[j];
}
}
public static void mergeSort(int array[]){
for(int i = 1;i<array.length;i=i*2){
merge(array,i);
}
}
新手入门,如有错误,请多多指教。