0001 template <typename T> void List<T>::mergeSort(LNP<T> h, LNP<T> t) { 0002 Rank n = *t - h - 1; //算出区间长度(线性时间) 0003 if (n < 2) return; //不足2个元素时,直接返回;否则... 0004 LNP<T> y = *h + n/2; //确定切分点:(h,t) = (h,y] + (y,t)(线性时间) 0005 mergeSort(y, t); //后缀与 0006 mergeSort(h, y = y->succ); //前缀各自排序 0007 merge(h, y, t); //归并:(h,y) + [y,t) 0008 } //mergeSort