归并算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class 归并算法 {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[]A= {5,3,1,7,2,9,4};
int[]temp=new int[A.length];
MergeSort(A, temp, 0, A.length-1);
System.out.println("result:");
for (int i = 0; i < A.length; i++) {
System.out.println(A[i]+",");
}
}
public static void MergeSort(int[]A,int[]temp,int left,int right) {
int mid=(left+right)/2;
if (right<=left) return;
MergeSort(A, temp, left, mid);
MergeSort(A, temp, mid+1, right);
Merge(A,temp,left,mid,right);

}
public static void Merge(int[]A,int[]temp,int left,int mid,int right){

int i=left,j=mid+1;
for (int k = left; k<=right;k++) {
temp[k]=A[k];
}
for (int k = left; k <=right; k++) {
if(i>mid) A[k]=temp[j++];
else if(j>right) A[k]=temp[i++];
else if(i>mid) A[k]=temp[j++];
else if (temp[i]<temp[j])A[k]=temp[i++];
else A[k]=temp[j++];
}

}

}