/**
* array[0.mid-1]和array[mid,num-1]分别有序,merge后array[0,num-1]之后任然有序
*/
package test;
import java.util.*;
public class Merge {
/**
* 依次比较array[0,mid-1](用i表示递增)和array[mid,num-1](用j表示递增)
* 如果array[i]<array[j]直接递增i
* 若 array[i]>= array[j] 将array[j]放在i的位置,并将array[i]插入到array[mid,num-1]排序,递增i
* 注意: 这里假定array[0,mid-1]和array[mid,num-1]都按升序排列,实际中用下面程序中的temp也很好完成这一结果
* @param array
* @param mid
*/
private static void merge(int[] array,int mid){
int i = 0;
int k;
int len = array.length;
int temp; //一个临时存储空间
while(i<mid){
if(array[i] <= array[mid]){
i++;
}
else{
temp = array[i];
array[i] = array[mid];
//将array[i]插入到array[j,num]中
k = mid+1;
while(k<len){
if(temp>array[k]){
array[k-1] = array[k];
k++;
}
else
break;
}
array[k-1] = temp;
i++;
}
}
}
/**
* 另一种解法:简单
*
* 将array[mid,num-1]中的元素不断的向array[0,mid-1]中插入
*
* @param array
* @param mid
*/
private static void merge1(int[] array,int mid){
int len = array.length;
int i=0;
int j=mid;
int temp;
while((i<=j)&&(j<len)){
if(array[i] <= array[j])
i++;
else{
temp = array[j];
for(int k=j-1;k>=i;k--)
array[k+1] = array[k];
array[i] = temp;
j++;
i++;
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {5,6,7,8,9,1,2,3,4,5,6,7};
merge1(array,5);
for(int i=0;i<array.length;i++){
if(i!=array.length-1)
System.out.print(array[i]+"-->");
else
System.out.print(array[i]);
}
}
}