归并排序思路:
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]; // } // } }