sortinga,b,c相当于sortingc; sortingb; sorting?

在C ++中,我必须实现一个“Excel / Access-like”(引用)查询生成器来允许对数据集进行自定义sorting。 如果您在Excel中使用查询构build器或SQL中的“ORDER BY a,b,c”按列A,B和C进行sorting,则将按顺序获取所有的As,每个组中的所有Bs都按顺序排列,所有相同的B组中的所有Cs都按顺序排列,这是大多数人通过“按a,b,csorting/sorting”所理解的。 这似乎与“按csorting”,然后“按bsorting”,然后“按asorting” – 即。 按照相反顺序在每列上单独sorting – 只要使用stable_sort即可。 这是我在我的程序中实现它的方式。 用户说“按a,b,csorting”,程序通过c执行stable_sort,通过b执行stable_sort,通过相同的结果执行stable_sort,以及迄今为止使用的所有数据集。 我的问题是,这是一个众所周知的等价性,适用于任何数据集( 提供了一个稳定的sortingalgorithm )和列的任意组合,甚至有mathcertificate吗? 到目前为止,我还没有通过Google或其他方式(请求程序员,统计人员和math家)find任何这样的证据。

是的,这是正确的。 “certificate”是在稳定的定义中:

如果每当有两个loggingR和S具有相同的关键字,并且R出现在原始列表中的S之前,则sortingalgorithm是稳定的,则R将总是出现在sorting列表中的S之前。

考虑一下你的algorithm,实现“按asorting,然后按bsorting”,然后sorting。 第一类(在b )将所有具有较低b的logging留在具有较高b的logging之前 – 由于是sortingalgorithm(稳定性不是第一类的要求)。

第二类(上)必须注意,只有当a s是相同的。 由于稳定 ,这种types的logging与它们在sorting之前的顺序相同,即按bsorting。 这正是你在按asorting时所达到a ,然后按bsorting。

同样的certificate可以扩展到多于两个键的sorting,通过观察到添加更多的sorting步骤以原始顺序保持先前步骤的结果,这正是我们希望在键的相等组内的顺序,更高的分类优先级