我正在写一个程序,它要求我使用预定义的函数对元素列表进行混洗,以生成提供给混洗器的随机性。random函数返回一个介于[0,1)之间的浮点数给shuffling函数,然后shuffler使用这种随机性来决定哪些元素应该放在列表中的哪个位置。
下面是我用来进行实验的元素的示例列表:
{“对象化”,“简化”,“减少”,“重用”,“建立”,“修辞”,“堡垒”,“微笑”,“破折号”,“重新定位”,“修饰”,"dapple",“点”,“重新布线”,“纵横”}
我的问题是,考虑到我可能有更大的元素池需要重新排列,什么是对这些元素进行排序的好方法?
发布于 2016-10-09 22:38:02
您可以使用此类对元素进行混洗和排序:
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);注:
我建议使用ArrayList
https://stackoverflow.com/questions/39944561
复制相似问题