递归算法实现划分到每一个位数: public static void mergeSort(int[]nums,int l,int r){ if(l==r)return;//当划分区间为一位数是直接返回 int m = (l+r)/2; mergeSort(nums,l,m); mergeSort(nums,m+1,r); merge(nums,l,m,r);//归并 } 采用双指针算法进行归并处理: static public void merge(int[]nums,int l,int m,int r){ int a = l; int i = l; int b = m+1; while(a<=m&&b<=r){ //help数组为临时存储归并后有序的数组 help[i++] = nums[a]<nums[b]?nums[a++] : nums[b++]; } while(a<=m)help[i++] = nums[a++]; while(b<=r)help[i++] = nums[b++]; //把help数组中归并好的部分在赋给原来的数组 for(i=l;i<=r;i++){ nums[i] = help[i]; } }
时间复杂度olog N;