2015-11-28 43 views
0

我試圖把運行一個程序,將打印1000個隨機數排序,他們在冒泡排序,但是當我運行這段代碼,它會打印我的1000個隨機數字,但不會排序出來。請幫助我理解。如何排序氣泡隨機數排序

import java.util.Random; 
import java.util.Arrays; 
public class JavaApplication3 { 
    public static void main(String [] args){ 
     Random g = new Random(); 

     int [] number = new int [1000]; 

     System.out.print("Random Numbers:"); 
     for (int d = 0 ; d<number.length ; d++){ 
      int RandomG = g.nextInt(1000)+1; 
      System.out.print(" " +RandomG); 
     } 

     System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number))); 
    } 
    public static int [] BubbleSortAsceMethod(int[] number){ 
     int temp; 

     for(int i = 0 ; i < number.length-1 ; i++){ 
      for (int j = 1 ; j < number.length-1 ; j++){ 
       if (number[j-1] < number[j]){ 
        temp = number[j-1]; 
        number[j-1] = number[j]; 
        number[j] = temp; 
       } 
      } 
     } 
     return number; 
    } 
} 

回答

0

你沒有用,而不是你剛纔設置的隨機數初始化「數字」陣它的大小爲1000.我認爲這就是爲什麼它沒有整理出來。你必須把你的「數字」數組中的第一個for循環和初始化/像這樣的隨機值來填充它: -

for (int d = 0 ; d<number.length ; d++){ 
    int RandomG = g.nextInt(1000)+1; 
    number[d] = RandomG; 
    System.out.print(" " +RandomG); 
    } 

下面是完整的代碼: -

package stackoverflow; 
import java.util.Random; 
import java.util.Arrays; 
/** 
* 
* @author User 
*/ 
public class StackOverFlow { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Random g = new Random(); 

     int [] number = new int [1000]; 

     System.out.print("Random Numbers:"); 
     for (int d = 0 ; d<number.length ; d++){ 
      int RandomG = g.nextInt(1000)+1; 
      number[d] = RandomG; 
      System.out.print(" " +RandomG); 
      } 

     System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number))); 

    } 
    public static int [] BubbleSortAsceMethod(int[] number){ 
     int temp; 

     for(int i = 0 ; i < number.length-1 ; i++){ 
      for (int j = 1 ; j < number.length-i-1 ; j++){ 
       if (number[j-1] > number[j]){ 
        temp = number[j-1]; 
        number[j-1] = number[j]; 
        number[j] = temp; 
       } 
      } 
     } 
     return number; 
    } 

} 
+0

內的循環應應該是:對(INT J = 1;Ĵ rcgldr

1

花時間,筆和紙,並繪製您的代碼實際上做了什麼。雖然缺口是很難讀,我相信你的錯誤就在於雙for循環(J是錯誤的)祝你好運!

0

的數字是亂序,需要時數[J-1]比數[J](不低於)更大,除非你想讓他們在逆序排序後進行交換。

內環應Ĵ< number.length - 我不Ĵ< number.length - 1

 for (int j = 1 ; j < number.length - i ; j++){ 
      if (number[j-1] > number[j]){