随机化Java中的列表元素(shuffle)

时间:2016-10-09 14:14:22

标签: java random

我正在编写一个程序,它要求我部分地使用预定义函数来重新排列元素列表,以生成随机性以提供给洗牌器。 random函数返回[0,1]到shuffling函数之间的float,然后shuffler使用这个随机性来决定哪些元素应该放在列表中的哪个位置。

这是我用来试验的元素的示例列表:

{" objectify","简化","减少","重复","建立", "修辞","堡垒","微笑","破折号","重新定位", "点缀"," dapple"," dot","重新布线"," schooner"}

我的问题是,考虑到我可能有一个更大,更大的元素池来重新排列,这是一个很好的排序方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用此类进行混洗并对元素进行排序:

import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

class ShuffleAndSort<T>
{
  List<T> list;
  public Shuffle(List<T> list)
  {
    this.list = list;
  }

  // Fisher–Yates shuffle
  public void shuffleArray(List<T> list)
  {
    Random random = ThreadLocalRandom.current();
    for (int i = list.size() - 1; i > 0; i--)
    {
      int index = random.nextInt(i + 1);
      // Simple swap
      T a = list.get(index);
      list.set(index, list.get(i));
      list.set(i, a);
    }
  }
  public boolean isInOrder(){
      //... to implement
  }
}

为了排序Bogosort考虑洗牌直到列表将排序:

while(!isInOrder(list))
    myShuffle.shuffle(list);

N.B。

我建议使用ArrayList