2016-12-25 6 views
0

誰かがこのバブルの並べ替えが私のコードでうまくいかない理由を説明することはできますか?私はこれが簡単に並べ替えると思います。たぶんすべて正しくはないがまだ幾分ソートされているのではなく、代わりに同じ配列を返しますか?Bubble Sortは同じ配列を再び返しますか?

import java.util.Random; 


public class Sorts { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     //Set array to be sorted length here! 
     int listLength = 20; 

     //Declares Array 
     int[] toBeSortedArray = new int[listLength]; 
     int[] sortedArray = new int[listLength]; 

     //fills Array with random numbers 
     for (int i = 0; i < listLength; i++) 
     { 
      Random rand = new Random(); 
      toBeSortedArray[i] = rand.nextInt(100); 
     } 


     //Passing toBeSortedArray to function 
     sortedArray = SwapSort(toBeSortedArray, listLength); 



     //Testing the filling of Array - *hint* select all comment lines and select "Toggle Block Comment" 
     for (int i = 0; i <listLength; i++) 
     { 
      System.out.print(toBeSortedArray[i] + ", "); 
     } 
     System.out.println(); 

     for (int i = 0; i <listLength; i++) 
     { 
      System.out.print(sortedArray[i] + ", "); 
     } 


    } 

    public static int[] SwapSort(int[] array, int length) 
    { 
     int temp; 
     for (int i = 0; i < length; i++) 
     { 
      for (int j = 1; j < length - 1; j++) 
      { 
       if (array[i] > array[j]) 
       {      
        temp = array[i]; 
        array[i] = array[j+1]; 
        array[j+1] = temp; 
       } 

      } 
     } 

     return array; 
    } 
} 

出力:j1で、iは、あなたの中に2とき

55, 42, 50, 48, 9, 38, 84, 10, 81, 24, 5, 18, 32, 74, 2, 89, 15, 84, 84, 45, 
55, 42, 50, 48, 9, 38, 84, 10, 81, 24, 5, 18, 32, 74, 2, 89, 15, 84, 84, 45, 
+0

:あなたは、配列を変更しています渡されたので、入力を変更しています。そしてあなたのアルゴリズムは壊れています。しかし、あなたのアルゴリズムが働いていれば、それらは同じであるが、ソートされています。 –

答えて

1

SwapSortであなたの内側のループがint j = i + 1; j < length(および外側のループでi < length - 1)で始める必要がありますが、何が起こるかを考えますアルゴリズム。また、スワップは、の要素であると比較して発生する必要があります。同様に、

public static int[] SwapSort(int[] array, int length) { 
    int temp; 
    for (int i = 0; i < length - 1; i++) { 
     for (int j = i + 1; j < length; j++) { 
      if (array[i] > array[j]) { 
       temp = array[i]; 
       array[i] = array[j]; 
       array[j] = temp; 
      } 
     } 
    } 
    return array; 
} 
2

3つのこと

まず、あなたは間違った要素を交換しています。

if (array[i] > array[j]) { 
    temp = array[i]; 
    array[i] = array[j]; 
    array[j] = temp; 
} 

あなたはあなたの内側のループが始まるがj = i + 1なく1で始まる必要があり、length件まで行かなければならない要素の配列[i]と

二番目の配列[j]を交換する必要があります。

、javaは参照によって配列を渡すと、あなたの元の配列も変更されますので、サード

あなたは関数を呼び出した後、あなたのコード内の両方の配列を印刷しているので、両方が同じ出力が得られます。あなたの元のコードで起こったスワップそうしても、あなたは同じ出力

完全なコードを持ってあなたの出力は、あなたの入力と同じではなく、むしろ逆ではありません

class Sorts { 
    public static void main(String[] args) { 
     //Set array to be sorted length here! 
     int listLength = 20; 

     //Declares Array 
     int[] toBeSortedArray = new int[listLength]; 
     int[] sortedArray = new int[listLength]; 

     //fills Array with random numbers 
     for (int i = 0; i < listLength; i++) { 
      Random rand = new Random(); 
      toBeSortedArray[i] = rand.nextInt(100); 
     } 

     for (int i = 0; i < listLength; i++) { 
      System.out.print(toBeSortedArray[i] + ", "); 
     } 

     //Passing toBeSortedArray to function 
     sortedArray = SwapSort(toBeSortedArray, listLength); 
    } 

    public static int[] SwapSort(int[] array, int length) { 
     int temp; 
     for (int i = 0; i < length; i++) { 
      for (int j = 1; j < length; j++) { 
       if (array[i] > array[j]) { 
        temp = array[i]; 
        array[i] = array[j]; 
        array[j] = temp; 
       } 

      } 
     } 
     System.out.println(""); 
     for (int i = 0; i < length; i++) { 
      System.out.print(array[i] + ", "); 
     } 
     System.out.println(); 
     return array; 
    } 
} 
+0

なぜjava.langをインポートしますか?これは自動的にjvm – firephil

+0

@firephilによってインポートされます。私はideoneを使用してコードをシミュレートしていました。そしてそこからソリューションを貼り付けてコピーして、私がインポートしていた図書館に通知しませんでした –

関連する問題