//归并排序 ,分解 归并
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 }