public static void merge(Comparable[] a, int lo, int mid, int hi) { int i = lo, j = mid + 1; for(int k = lo; k <= hi; k++)//复制 aux[k] = a[k]; for(int k = lo; k <= hi; k++)//把a[]填满就退出循环 { if(i > mid)//左侧已用完,则只能从右侧拿 a[k] = aux[j++]; else if(j > hi)//右侧已用完,则只能从左侧拿 a[k] = aux[i++]; else if(less(aux[i], aux[j]))//当前左侧比右侧小,从右侧拿 a[k] = aux[i++]; else//反之当前右侧比左侧小,从左侧拿 a[k] = aux[j++]; } }
Abstract in-place merge(P271)
猜你喜欢
转载自www.cnblogs.com/w-j-c/p/9108926.html
今日推荐
周排行