7

並べ替えられた配列が与えられた場合、並べ替えられた配列と同じ要素を持つ出力配列を作成するためにどのアルゴリズムを使用できますが、要素はランダムにシャッフルされる必要があります。O(n)の複雑さを持つアルゴリズムを探しています

4

2 に答える 2

15

Collections.shuffle(List)O(n)時間の複雑さがあります。Arrays.asList()この関数を使用できるように、配列をラップするために使用できます。

それがすることは次のとおりです。

最後の要素から 2 番目の要素までの各要素について、その要素を、それ自体を含むリストの残りの要素からのランダムな要素と交換します。つまり、要素をランダムに移動することはできません。

for (int i=size; i>1; i--)
    swap(list, i-1, rnd.nextInt(i));
于 2012-09-06T08:21:37.163 に答える
3

このコードを使用できます

    // Create a list
    List list = new ArrayList();
    // Add elements to list
    // Shuffle the elements in the list
    Collections.shuffle(list);
    // Create an array
    String[] array = new String[] { "a", "b", "c" };
    // Shuffle the elements in the array
    Collections.shuffle(Arrays.asList(array));

    for (int i = 0; i < array.length; i++) {
        System.out.println("Count is: " + i + " letter is " + array[i]);
    }

これは次のようなものを出力します:

カウント: 0 文字は b

数: 1 文字は

数: 2 文字は c

http://www.exampledepot.com/egs/java.util/coll_Shuffle.htmlから

于 2012-09-06T08:22:25.300 に答える