针对部分排序数据的分析排序算法

时间:2011-02-25 03:06:55

标签: algorithm sorting

我们知道有几种类型,例如插入排序,对于“大部分已排序”且在随机数据上不太好的数组非常有用。

假设我们想要分析这种算法相对于输入数据的“排序”方式的性能改进/降级。什么是生成“越来越多排序”或“越来越随机”的元素数组的好方法?我们如何衡量输入的“排序性”?

3 个答案:

答案 0 :(得分:10)

Number of Inversion是衡量数组排序量的常用方法。

如果(pi,pj)i<j,置换p中的一对元素pi >pj称为置换中的反转。例如,在排列(3,1,2,5,4)中包含3个反转(3,1)(3,2)(5,4)

排序数组得到0反转,反向排序数组得到n *(n-1)/ 2。

答案 1 :(得分:2)

您可以通过在已经排序的数据集上中断现代Fisher-Yates shuffle运行来生成“部分排序”的数据集。

此外,如果您只需要一些基本上固定的部分排序数据集,那么您可以为每个数据生成位置与值的列图,并且只需将它们点眼。这样可以让你快速查看集合的一般随机性,以及有多少本地化顺序等事情。

答案 2 :(得分:0)

另请参阅创建二进制堆,然后使用数组表示作为起点。在数组中实现的二进制堆不是排序,但它是有序的。我认为这将被视为“部分排序。”