java將一數組亂序排列


JAVA的Collections類中shuffle方法模擬了“洗牌”動作可以對list列表進行隨機排序。
如果一定要自己寫,算法也很簡單:
假設數組array長度為n。
用標准隨機函數rand(n)生成[0, n-1]之間的一個隨機數,將array[n-1]和array[rand(n)]交換,這樣就把array[n-1]位置上的數確定了;
再將array[n-2]和array[rand(n-1)]交換,確定array[n-2]位置上的數;
再將array[n-3]和array[rand(n-2)]交換,確定array[n-3]位置上的數;
。。。。。。
最后將array[0]和array[rand(1)]交換(實際就是自己和自己交換),把array[0]確定了
這樣生成的array[0..n-1]的數組是完全隨機的亂序,且時間復雜度為O(n),空間復雜度為O(1)
 1 public int []  shuffle(int [] arr) {  
 2  int [] arr2 =new int[arr.length];  
 3  int count = arr.length;  
 4  int cbRandCount = 0;// 索引  
 5  int cbPosition = 0;// 位置  
 6  int k =0;  
 7  do {  
 8   runCount++;  
 9   Random rand = new Random();  
10   int r = count - cbRandCount;  
11   cbPosition = rand.nextInt(r);   
12   arr2[k++] = arr[cbPosition];  
13   cbRandCount++;  
14   arr[cbPosition] = arr[r - 1];// 將最后一位數值賦值給已經被使用的cbPosition  
15  } while (cbRandCount < count);  
16  System.out.println("運算次數  = "+runCount);  
17  return arr2;  
18 }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM