我们知道有几种类型,例如插入排序,对于“大部分已排序”且在随机数据上不太好的数组非常有用。
假设我们想要分析这种算法相对于输入数据的“排序”方式的性能改进/降级。什么是生成“越来越多排序”或“越来越随机”的元素数组的好方法?我们如何衡量输入的“排序性”?
答案 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)
另请参阅创建二进制堆,然后使用数组表示作为起点。在数组中实现的二进制堆不是排序,但它是有序的。我认为这将被视为“部分排序。”