2017-04-25 6 views
1

以下は、異なるサイズの複数の配列を入れた挿入メソッドを呼び出す主なメソッドです。私はこの例では1つの配列しか持っていませんが、実行される複数の配列があります。私はarr2をソートソートのように並べ替える方法を理解できません。 arr2の終わりからarr2の正しい点に到達するまで、そしてソートされていない配列をもう一度見て、arr2の最後に次の番号を置き、ソートされるまで何度もソートしますこれで私を助けることができれば素晴らしいだろう。そして、はい、私は他のコードを見てきましたが、私の問題を助けるものはありませんでした。私はこれを理解しようと1週間過ごしました。最初arr2できる決して== sortedJava挿入ソート

static void insertionSort(int[] arr) { 
    final long startTime = System.nanoTime(); // starts timer 
    System.out.println("Insertion Sort"); 
    //************** Code For Sorting *****************// 
    int[] sorted = Arrays.copyOf(arr, arr.length); // Copies unsorted array to new array 
    Arrays.sort(sorted); // sorts unsorted array for compairison later on 

    int[] arr2 = new int[arr.length]; 
    for(int h = 0; h < arr.length - 1; h++){// makes arr2 all 0's 
     arr2[h] = 0; 
    } 

    arr2[arr2.length - 1] = arr[0]; 
    for(int k = 0; k < arr.length; k++){ 
     System.out.print(arr2[k] + ", "); 
    } 
    System.out.println(); 


    while(arr2 != sorted){ 

     for(int i = 1; i < arr2.length; i++){ 
      if(arr[i] < arr2[arr2.length-1]){ 
       int last = arr2[arr2.length-1]; 
       int before = arr[i]; 
       arr2[arr2.length-1]= before; 
       arr2[arr2.length-2]= last; 

       // CANT FIGURE OUT HOW TO SORT CORRECTLY 
      } 





      for(int k = 0; k < arr.length; k++){ 
       System.out.print(arr2[k] + ", "); 
      } 
      System.out.println(); 
     } 

    } 
    for(int k = 0; k < arr.length; k++){ 
     System.out.print(arr2[k] + ", "); 
    } 
} 
public static void main(String[] args) { 
    int arr[] = {}; // Array that will be put into each sort method 
    //****************Multiple Arrays for testing*******************// 

    /* ************All Arrays Are Whole Numbers 1-100*************** 
    arr1 = Array of size 20 
*************************************************************** */ 
    int arr1[] = {6,3,20,10,11,2,9,1,19,17,4,16,8,15,18,14,5,7,12,13}; // {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} 
//**************************************************************// 
    int arrayNumber = 1; 
    while(arrayNumber < 2){ 
     if (arrayNumber == 1){ 
      arr = arr1; 
     } 
System.out.println("Array "+ arrayNumber +" Before Sorting"); 
     for(int i = 0; i < arr.length; i++){ 
      System.out.print(arr[i] + ", "); 
     } 
     System.out.println(); 
     //************* Array put into Methods***************// 
insertionSort(arr); 
//***************************************************// 
     arrayNumber++; // Adds 1 to arrayNumber to show next array 
    } 

} 

答えて

1

==は2つのオブジェクトが同じアドレスを持っていることを意味します をメモリに入れて、挿入ソートはObjectのセットをソートし、ソートされたコレクションに格納します。insertionSort(int[] arr)メソッドで少なくとも2つの配列が必要です。arr2はソートされた配列です.butあなたは別の言葉で、あなたはarr2 = new int[arr.length*2];を初期化することができます.AND arr[i]>= arr[j] && arr[i]<arr[j+1]は、インデックスjが正しい場所 ある場合はarr2[j]arr[i]を比較するときにだけさarrを繰り返す.AND右place.the適切な場所にarr[i]を挿入し、より多くのスペースを必要としています。インデックスjと最後の要素arr2の間のarr2のすべての要素を移動すると、arr2.length-1ではなくarr[k]と表示されます。重要なことは、arr2[k]を最初に1ステップ移動する必要がありますちょうどarr[k+1]=arr[k];のようになり、今から1つのオブジェクトがarr2に挿入されました。

関連する問題