0001 using U = unsigned int; //约定:类型T或就是U;或可转换为U,并依此定序 0002 0003 template <typename T> //对列表中起始于位置p、宽度为n的区间做基数排序 0004 void List<T>::radixSort( ListNodePosi<T> p, Rank n ) { // valid(p) && Rank(p) + n <= size 0005 ListNodePosi<T> h = p->pred; //待排序区间为(h, t) 0006 ListNodePosi<T> t = p; for ( Rank i = 0; i < n; i++ ) t = t->succ; 0007 for ( U radixBit = 0x1; radixBit && (p = h); radixBit <<= 1 ) //以下反复地 0008 for ( Rank i = 0; i < n; i++ ) //根据当前基数位,将所有节点 0009 radixBit & U (p->succ->data) ? //分拣为后缀(1)与前缀(0) 0010 insert( remove( p->succ ), t ) : p = p->succ; 0011 } //为避免反复remove()、insert(),可增加List::move(p,t)接口,将节点p直接移至t之前