归并排序思路:
1)、进行归并排序的数列本身就是有序的
2)、用数列1和数列2进行比较(这里是从小到大进行排列),小的数放入结果集中然后又进行比较
3)归并和快速排序一样也使用了递归(递归是先分到里层,然后层层像外递归)
///归并排序
public void partition2(int a[],int left,int right){
int mid;
if(left<right){
mid=(left+right)/2;
partition2(a, left, mid);
partition2(a, mid+1, right);
int b[]=new int[a.length];
mergeSort(a, b, left, mid, right);
arraysCopy(a,b,left,right);
}
}
private void arraysCopy(int[] a, int[] b, int left, int right) {
// TODO Auto-generated method stub
for(int i=left;i<=right;i++){
a[i]=b[i];
}
}
public void mergeSort(int a[],int b[],int left,int mid,int right){
int p=left;
int r=mid+1;
int k=left;
while(p<=mid&&r<=right){
if(a[p]<a[r]){
b[k++]=a[p++];
}else{
b[k++]=a[r++];
}
}
while(i<=mid)//左子序列排完,,照搬右子序列
b[k++]=a[i++];
while(j<=right)//右子序列排完,,照搬左子序列
b[k++]=a[j++];
// if(p>mid){
// for(int i=r;i<=right;i++){
// b[k++]=a[i];
// }
// }else{
// for(int i=p;p<=mid;i++){
// b[k++]=a[i];
// }
// }
}