标准库排序使用用户提供的比较功能,因此您可以在其中插入比较计数器.quicksort/introsort或mergesort的比较总数将非常接近log 2 N*N(其中N是向量中元素的数量).这就是我导出到进度条的内容:比较次数/ N*log 2 N.
由于您使用的是mergesort,因此比较计数将非常精确地衡量进度.如果实现花费时间在比较运行之间置换向量,它可能略微是非线性的,但我怀疑你的用户会看到非线性(并且无论如何,我们都习惯于不准确的非线性进度条:)).
Quicksort/introsort会显示更多的变化,具体取决于数据的性质,但即使在这种情况下,它总比没有好,你总是可以根据经验添加一个软糖因子.
比较课程中的一个简单计数器几乎不会花费你.就个人而言,我甚至不打扰它(锁会伤害性能); 它不太可能进入一个不一致的状态,无论如何进度条不会开始放射蜥蜴只是因为它得到一个不一致的进度数.