采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
int i = l, j = mid+1;
for( int k = l ; k <= r; k ++ ){
if( i > mid ) { arr[k] = aux[j-l]; j ++;}
else if( j > r ){ arr[k] = aux[i-l]; i ++;}
else if( aux[i-l] < aux[j-l] ){ arr[k] = aux[i-l]; i ++;}
else { arr[k] = aux[j-l]; j ++;}
}
因为mergeSort是对数组[l...r]这个区间进行归并操作。我们使用了一个临时的数组aux。而这个临时数组aux我们只开辟了r-l+1这么多的空间,索引是从0开始的。换句话说,aux[0...r-l+1]对应了arr[l...r],他们之间存在一个l的偏移,所以我们在处理的时候就要考虑这个偏移啦。
非常感谢!
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.7k 21
5.7k 3
4.9k 5
1.3k 18