📜  混淆数组的Java程序

📅  最后修改于: 2022-05-13 01:55:22.487000             🧑  作者: Mango

混淆数组的Java程序

给定一个大小为 N 的数组,任务是打乱数组的元素或任何其他排列。使用Java认为通过生成数组中存在的元素的随机序列来填充数组是可能的。这种算法称为Fisher-Yates Shuffle Algorithm。

Fisher-Yates shuffle 算法的时间复杂度为 O(n)。假设是给定函数rand() 在 O(1) 时间内生成一个随机数。从最后一个元素开始,将其与从整个数组中随机选择的元素交换。现在考虑从 0 到 n-2 的数组(大小减 1),并重复直到我们遇到第一个元素。

例子:

Input : arr[] = {1, 2, 3, 4}
Output: arr[] = {3, 2, 4, 1}

Input : arr[] = {5, 2, 3, 4}
Output: arr[] = {2, 4, 3, 5}

算法:

for i from n - 1 downto 1 do
       j = random integer with 0 <= j <= i
       exchange a[j] and a[i]

下面是上述方法的实现:

Java
// Program to jumble an array  using Java
import java.util.Random;
import java.io.*;
  
public class GFG {
    public static void shuffleanarray(int[] a)
    {
        int n = a.length;
        Random random = new Random();
        // generating random number from list
        random.nextInt();
        
        for (int i = 0; i < n; i++) {
            
            // using random generated number
            int change = i + random.nextInt(n - i);
            
            // swapping elements to shuffle
            int holder = a[i];
            a[i] = a[change];
            a[change] = holder;
        }
    }
    public static void main(String[] args)
    {
        int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6 };
        shuffleanarray(a);
        System.out.print("arr[] = {");
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.print("}");
    }
}


输出
arr[] = {4 0 6 1 5 3 2 }

时间复杂度: O(N),其中 N 是数组的大小。