2016-11-07 50 views
0

所以我已經完成了大部分代碼。我只是不知道爲什麼排序列表不是從最小到最大的順序。該任務是從1-10生成10個隨機整數。顯示未排序的列表。顯示排序(從最小到最大)。顯示數組內容。Java bubblesort 1-100

 int [] number = new int [10]; 

     System.out.print("Random Numbers:"); 
     for (int d = 0 ; d<number.length ; d++){ 
      int RandomG = g.nextInt(100) + 1; 
      System.out.print("\t" + RandomG); 
      number[d] = RandomG ; 
     } 
     System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number))); 
    } 

    public static int [] BubbleSortAsceMethod(int[] x) { 
     int temp; 

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

請通過縮進每塊四個空間,通過確保同一塊塊或同級別每行縮進的精確相同數量的其他格式化你的代碼。是的,這是一個挑剔的要求,但同樣,我們是志願者,並且要付出努力,以方便別人來幫助你。 –

+2

另外,請包含您的完整代碼。你從一種方法開始。 –

+2

好吧,我試圖格式化您的代碼,但它仍然不可理解。就好像你已經發布了足夠的代碼來挫敗我們,但還不足以幫助我們發現你的問題。請修復。 –

回答

0

您需要更改條件

當前代碼

if (x[j - 1] < x[j]) 

固定碼

if (x[j - 1] > x[j]) 

但是你可以通過添加isSorted標誌提升你的代碼。

public static int[] BubbleSortAsceMethod(int[] x) { 
    for (int i = 1; i < x.length; i++) { 
     boolean isSorted = true; 

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

我只是想不通,爲什麼排序列表中是不是爲了從最小到最大。

你的問題是在x[j - 1] < x[j]。當前的遍歷值(temp = x[j - 1])之前的temp變量被指定了一個小值,然後它與當前遍歷值中較大的值進行交換,這意味着當前遍歷之前的值始終會有比當前遍歷值更大的值。這就是爲什麼這個數字從大到小排序。

要糾正它,只是簡單地改變從x[j - 1] < x[j]條件爲x[j - 1] > x[j],其中temp值將具有最大值當前遍歷值之前被分配從一步法和交換當前遍歷值與最低值的位置。因此,當前遍歷之前的值將總是比其當前遍歷值更低。

public static void main(String[] args) { 
    int[] number = new int[10]; 
    Random g = new Random(); 

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

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

public static int[] BubbleSortAsceMethod(int[] x) { 
    int temp; 

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

    return x; 
} 

注:您的代碼是不完整的,所以我需要去完成它(你),也許它可能是不實際的代碼相同。請在下次提問時讓其他人瞭解它。