0001 template <typename T> //对各自有序的[lo,mi)和[mi,hi)做归并 0002 void Vector<T>::merge(Rank lo, Rank mi, Rank hi) { //lo < mi < hi 0003 Rank s = 0; T* S = _elem + lo; //就地归并至序列S[0,hi-lo) 0004 Rank a = 0, la = mi-lo; T* A = new T[la]; //A[0,la)复制自 0005 for (Rank i = 0; i < la; i++) A[i] = S[i]; //S的前缀 0006 Rank b = 0, lb = hi-mi; T* B = S + la; //B[0,lb)就是S的后缀 0007 while ((a < la) && (b < lb)) //反复地比较A、B的首元素 0008 S[s++] = (A[a] <= B[b]) ? A[a++] : B[b++]; //小者优先归入S 0009 while (a < la) //若B先耗尽,则还需将A残余的后缀归入S 0010 S[s++] = A[a++]; //反之若A先耗尽,因B残余的后缀已在S中,故无需处理 0011 delete[] A; //new和delete很耗时,如何减少? 0012 } //merge