我想生成一些测试数据来测试将“k个排序”列表(每个元素距正确排序位置最多k个位置的列表)合并到一个完全排序的列表中的函数。我有一种可行的方法,但我不确定它的随机性有多好,我觉得应该有一种更简单/更优雅的方法来做到这一点。我目前的做法:
- 生成与整数索引配对的 n 个随机元素。
- 对随机元素进行排序。
- 将每个元素的配对索引设置为其排序位置。
- 向后遍历元素,将每个元素与列表中其后面 1 到 k 个位置之间的随机距离的元素交换。只有当它的配对索引是它的当前索引时才与目标元素交换(这避免了交换一个已经不合适的元素并将它移动到远离它应该在的位置的 k 个位置之外)。
- 将扰动的元素复制到另一个列表中。
就像我说的那样,这可行,但我对替代/更好的方法感兴趣。