Merge sort algorithm:
Public classMergeSort { Public Static voidMergeSort (intA[],intLowintHigh ) { if(low<High ) { intMiddle= (Low+high)/2; MergeSort (A,low,middle); MergeSort (A,middle+1, high); Merge (A,low,middle,high); } } Public Static voidMerge (intA[],intLowintMiddle,intHigh ) { intb[]=New int[High-low+1]; intK=0; intI=low,j=middle+1; while(i<=middle&&j<=High ) B[k++]=A[I]<A[J]? a[i++]:a[j++]; while(i<=middle) B[k++]=a[i++]; while(j<=High ) B[k++]=a[j++]; I=Low ; K=0; while(i<=High ) A[i++]=b[k++]; }}
View Code
Natural Sorting algorithm:
Public classMergesortupgrade { Public Static voidMergesortupgrade (inta[]) { intS=1; while(s<a.length) {Mergepass (a,s); S+=s; } } Public Static voidMergepass (intA[],ints) { intn=a.length; inti; for(i=0;i<=n-2*s;i=i+2*s) Merge (A,i,i+s-1,i+2*s-1); if(i+s<n) Merge (a,i,i+s-1,n-1); } Public Static voidMerge (intA[],intFirstintMiddle,intend) { intb[]=New int[End-first+1]; intI=first,j=middle+1,k=0; while(i<=middle&&j<=end) B[k++]=A[I]<A[J]? a[i++]:a[j++]; while(i<=middle) B[k++]=a[i++]; while(j<=end) B[k++]=a[j++]; I=first;k=0; while(i<=end) A[i++]=b[k++]; }}
View Code
Merge sort: Divide first in merge.
Natural sort: Merges the sub-array segment with length s, which is initially 1, followed by S+=s.
Divide and conquer algorithm--merge sort and natural sort