高效產生一組不重複的隨機數(受程式設計珠磯啟示)java實現
高效產生一組不重複的隨機數這個需求應該是很常見的吧,需要從 0 到 n 之間選 k 個不重複的陣列成一個序列。演算法複雜度O(n),受程式設計珠磯啟示,我用java寫了該演算法的實現,由於時間比較緊,其他的以後補充吧,直接上演算法和效果:
import java.util.Scanner;
//隨機生成n個不重複隨機數,演算法複雜度O(n) 受程式設計珠磯啟示
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//輸入產生隨機數的個數n
System.out.println("輸入產生隨機數的個數n:");
int n = sc.nextInt();
//初始化一個陣列
int[] arr = new int[n];
for(int i=0;i<arr.length;i++){
arr[i]=i;
}
//交換陣列中的兩個元素值
for(int i=0;i<arr.length;i++){
swap(arr,i,randInt(i,arr.length-1));
}
//輸出隨機後的陣列值
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
if((i+1)%10==0)
System.out.println();
}
}
//randInt()函式的實現
private static int randInt(int x,int y){
//return (int)(Math.random()*100%(y-x+1)+x);//這個演算法還是不好
return (int)(Math.random()*(y-x+1)+x);
}
//實現swap()方法
private static void swap(int[] arr,int x,int y){
int temp ;
temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
執行結果:
我們有時候需要進行一些資料的測試,苦於沒有這些資料,我的初衷也是如此,我也折騰了很久,發現目前這種方法的效率是最高的,貼出來同有需要的朋友分享一下,有不妥之處還望各位網友朋友不吝賜教。
相關文章
- 高效產生一組不重複的隨機數隨機
- 高效產生不重複的隨機數隨機
- js實現的產生隨機數程式碼例項JS隨機
- 巧用物件,生成不重複隨機數物件隨機
- javascript生成不重複隨機數程式碼例項JavaScript隨機
- C++【生成16個不重複字母】(生成不重複隨機數)C++隨機
- 計算機隨機數的產生 (轉)計算機隨機
- JavaScript隨機不重複的字元組成新的字串JavaScript隨機字元字串
- 如何生成隨機不重複的11位數字隨機
- matlab之生成不重複的隨機整數Matlab隨機
- C語言程式生成指定範圍的不重複的隨機數C語言隨機
- js獲取指定位數不重複隨機數程式碼例項JS隨機
- R產生隨機數隨機
- JavaScript產生隨機數例項程式碼JavaScript隨機
- vc中產生隨機數隨機
- c++產生隨機數C++隨機
- 集合框架-產生10個1-20之間的隨機數,要求隨機數不能重複框架隨機
- JavaScript 陣列隨機不重複元素JavaScript陣列隨機
- 【筆記】如何產生隨機數筆記隨機
- js隨機產生區間數JS隨機
- 生成固定長度不重複的隨機字串隨機字串
- matlab產生隨機數或隨機矩陣Matlab隨機矩陣
- 隨機產生0-1之間實數的方法隨機
- 如何產生指定範圍的隨機數隨機
- C 語言產生隨機數的方法隨機
- C語言產生隨機數的方法C語言隨機
- oracle要對一個欄位產生隨機數Oracle隨機
- linux生產32位隨機數Linux隨機
- Math類產生隨機數後保留一位小數隨機
- 產生一個32位的16進位制隨機數隨機
- 程式設計珠璣,字字珠璣程式設計
- JavaScript陣列中隨機取出不重複項JavaScript陣列隨機
- java 無重複取隨機數Java隨機
- 產生唯一隨機碼的方法分析隨機
- 程式設計珠璣:續(程式設計珠璣.Ⅱ修訂版)程式設計
- 從oracle表中隨機取記錄,產生隨機數和隨機字串Oracle隨機字串
- 程式設計珠璣程式設計
- 產生0到100內的任意隨機數隨機