//归并排序 ,分解 归并
1 package offer; 2 3 import java.util.Arrays; 4 /*对于两个子序数组进行排序 5 public class guibingsort { 6 public static void mergearray(int a[],int start,int mid,int end){ 7 int i=start; 8 int[] temp=new int[end-start+1]; 9 int j=mid+1; 10 int k=0; 11 while(i<=mid&& j<=end){ //取出两个子列中的较小者, //放入额外的存储数组中temp 12 if(a[i]<=a[j]){ 13 temp[k++]=a[i++]; 14 } 15 else{ 16 temp[k++]=a[j++]; 17 } 18 } 19 if(i<=mid){ //将剩余元素全部存入temp中 20 while(i<=mid){ 21 temp[k++]=a[i++]; 22 } 23 } 24 if(j<=end){ 25 while(j<=end){ 26 temp[k++]=a[j++]; 27 } 28 } 29 for(int x=0;x<temp.length;x++){ //赋值给原数组 30 a[x+start]=temp[x]; 31 } 32 } 33 public static int[] mergesort(int a[],int start,int end ){ 34 if(start<end){ 35 int mid=(end-start)/2+start; 36 mergesort(a,start,mid); //利用递归进行分解 37 mergesort(a,mid+1,end); 38 mergearray(a,start,mid,end); //归并函数归并 39 } 40 return a; 41 } 42 43 public static void main(String[] args) { 44 // TODO Auto-generated method stub 45 int[] p={2,7,8,3,1,6,9,0,5,4}; 46 guibingsort.mergesort(p,0,p.length-1); 47 System.out.println(Arrays.toString(p)); 48 } 49 50 }