這是轉(zhuǎn)的,在別的地方看到的悲伶,記錄下來(lái)~
排序的算法有很多艾恼,也有很多公認(rèn)的方法,冒泡麸锉、插排钠绍、快排。亂序的算法一直沒(méi)有什么公認(rèn)的好方法花沉。自己嘗試做了一些柳爽,覺(jué)得這個(gè)方法還比較不錯(cuò),在這里把東西備份一下碱屁,以免以后忘記了磷脯,找不到了。如果有朋友有更好的算法娩脾,請(qǐng)您賜教赵誓。
假設(shè)現(xiàn)在有一個(gè)集合,里面有10個(gè)元素柿赊,需要做亂序俩功。
我的做法是,每次隨機(jī)產(chǎn)生一個(gè)集合索引范圍內(nèi)的隨機(jī)數(shù)碰声,從集合中把這個(gè)元素移除诡蜓,然后把這個(gè)元素放到集合的頭部或者尾部,當(dāng)然只做一次胰挑,沒(méi)有很好的效果蔓罚,集合有多少元素,就做多少次瞻颂,或者更多豺谈,但是更多次好像意義不是很大,循環(huán)次數(shù)基本與集合中元素個(gè)數(shù)相同就差不多了贡这。
具體代碼核无,只需要一個(gè)方法,如下:
public class RandomNumber {
public static List<Integer> getRandom(int size) {
List<Integer> temp = new LinkedList<Integer>();
for (int i = 0; i < size; i++) {
temp.add(i);
}
for (int i = size; i > 0; i--) {
int ran = (int) (Math.random() * i);
int randomValue = temp.remove(ran);
temp.add(size - 1, randomValue);
}
return temp;
}
}