如何有效地将元素随机重新插入数组

时间:2019-05-07 22:56:04

标签: java arrays random insert

假设我们有一个整数数组int[] A = {1,2,3,4,5,6,7,8,9}

假设我们想从A中选择一个随机整数,然后将其随机重新插入数组中的其他位置,就像这样:

首先服用一些int number = A[random.nextInt(A.length)]

假设我们随机选择5,然后在78之间随机地重新插入,以便A变成{1,2,3,4,6,7,5,8,9}

现在,我们显然可以通过创建一些临时变量int temp = 5,将子数组{6,7}移到左侧,然后将5重新插入到索引中来执行此重新插入操作之前被7占用。但是,有没有一种更有效的方法可以执行此操作而无需移动某些子数组(也无需更改为其他数据结构,例如链表)?因为很明显,我们遇到了O(n)的最坏情况,我们随机选择A[0],然后将其插入A[A.length],这需要移动数组中的所有元素,我希望不想做。

1 个答案:

答案 0 :(得分:0)

对此没有做很多测试,但这是解决方案的简要概述。

System.arraycopy

虽然 general 方法几乎就是您所描述的,但我怀疑(defun make-cd (artist title rating ripped) (push (list :artist artist :title title :rating rating :ripped ripped) *cds*)) 的性能要比(几乎)您要获得的其他任何性能都要好。不过我可能错了。