2012-01-27 8 views
1

私は現在データ構造とアルゴリズムコースを取っていますが、演習では3つのforループを使ってシェーカーソートアルゴリズムを実装しています。コードスニペットには私が修正したいくつかのエラーが含まれていましたが、なぜこれを取得するのか分かりません。 サイズ12の配列を初期化すると、最初のインデックス値はソートされません。理由を理解する。シェーカーソートまたは双方向バブルソート

  • 要素0:53
  • 要素1:27
  • 要素2:28
  • エレメント3

    // Method which will sort an array by using the shakersort algorithm 
    public void shakerSort(int[] array) 
    {  
    
        for (int p = 1; p < array.length-1; p++) 
        { 
    
         for (int i = p-1; i < array.length-2; i++) 
         {     
          if (array[i] > array[i+1]) 
          { 
           super.swap(array, i, i+1); 
          }    
         } 
    
         for (int i = array.length-p-1; i > 0; i--) 
         { 
          if (array[i] > array[i+1]) 
          { 
           super.swap(array, i, i+1); 
          } 
         } 
    
        } 
    

    私の結果はこれだった:はここに私のコードです:53

  • エレメント4:90
  • 要素5:72
  • 要素6:80
  • 要素7:67
  • 素子8:2
  • 素子9:33
  • 素子10:45
  • 素子11:91
  • ソート後...
  • 要素0:27
  • 要素1:2
  • 要素2:28
  • 要素3:33
  • 要素4:45
  • 要素5:53
  • 要素6:53
  • 要素7:67
  • 素子8:72
  • 素子9:80
  • 素子10:90
  • 素子11:91

お時間をありがとうとあなたのコードはまったくarray[0]を使用しないように私には思える

-Daniel

答えて

3

を助けます。

最後のループでは、i+1ではなく、ii-1を交換することができます。 何をする必要が内側に2つのネストされたループ、サイズ0から1に行く1と0のサイズ-1から他のメインループは次のとおりです。

また、私の知る限り、これはシェーカーやバブルソートではありません、ループ間でスワップするかどうかをテストし、そうでない場合は配列をソートします。

Take a look here for a clean implementation

+0

ご回答のおかげで、私はそれを動作させることができました。はい、これはシェーカー/カクテルです。実装では、do-whileおよびBoolean変数ではなく、ネストされたforループを使用します。 – Daniel