由于STL中提供的sort算法是用在RandomAccessIterator上的,而list迭代器不具备随机访问的特性,所以对list进行排序不能使用algorithm中的sort算法,而应该使用list的成员函数sort。对list进行排序,最直接的想法就是用MergeSort,但是每次找中点就需要O(n),可能考虑到这点,成员函数sort并没有采用这种方式实现,而是用了非递归版的MergeSort,将待归并的子序列先保存下来,感觉有点以空间换时间的意思。(更正!由于list链表的特殊性,在进行swap和merge并没有使用额外的空间,所以最多只是牺牲了常数个list结构的空间,而元素本身并没有占用多余的空间。所以并没有牺牲空间)
主要想法就是,将已经有序的子序列先保存下来,然后再一一进行merge。那到底有多少个子序列需要merge呢?每个子序列又如何确定呢?虽然是非递归版MergeSort,但本质思想是一样的,子序列也是由一系列更小的子序列merge而来的。可以将list的长度len表示成二进制形式,