2012-04-03 7 views
0

私は問題に遭遇し、あなたのガイダンスが必要です。基本的に私はこのバブルソート方法を作成することができました。これをGap Sortに変更すると、リストのたびに隣接する要素を比較するのではなく、(i)個の位置が離れている要素が比較されます(iはn未満の整数です)。例えば、第1の要素は、(i + 1)要素、(i + 2)要素に第2の要素、(ni)要素にn番目の要素などと比較される。単一の反復は、すべての要素比較することができ、比較されている。次の反復で、iは1より大きく、いくつかの数で減少し、私が1未満気泡ソートの変更にバブル並べ替え

public static void bubbleSort (Comparable[] data, int maxlength){ 
    int position, scan; 
    Comparable temp; 

    for (position = maxlength; position >= 1; position--){ 
     for (scan = 0; scan <= position – 1; scan++){ 
      if (data[scan].compareTo(data[scan+1]) > 0){ 
       // Swap the values 
       temp = data[scan]; 
       data[scan] = data[scan + 1]; 
       data[scan + 1] = temp; 
      } 
     } 
    } 
} 
+0

ですGapSort実装をお探しですか?このリンクの2番目の記事をチェックしてください:http://www.daniweb.com/software-development/java/threads/238791/gap-sort – Fido

+0

thnx。あなたは何かを説明できますか? "double SF = 1.3;"それはなぜ有用なのでしょうか? – serge

+0

大きなアイデアから始め、すべてのループでそれを縮小することです。 SFは "縮小係数"のようなものです(このポストでは、 "縮小係数"のようなものを意味します)。この場合は約76%です(つまり、繰り返しごとに76%に縮小されます値)。 – Fido

答えて

1

http://www.daniweb.com/software-development/java/threads/238791/gap-sortにあります)このコードになるまでプロセスが継続され、あなたを助けるかもしれない:

public static void gapSort (Comparable [] data, int size) { 
    int index; 
    int gap, top; 
    Comparable temp; 
    boolean exchanged; 

    double SF = 1.3; 
    gap = size; 

    do { 
     exchanged = false; 
     gap = (int) (gap/SF); 
     if (gap == 0){ 
      gap = 1; 
     } 
     for (index = 1; index <= size - gap; index++) { 
      if (data [index].compareTo(data [index + gap]) > 0) { 
       temp = data [index]; 
       data [index] = data [index + gap]; 
       data [index + gap] = temp; 
       exchanged = true; 
      } 
     } 
    } while (exchanged || gap > 1); 
} 

覚えておいてくださいComparableインターフェイスを実装するオブジェクトの配列を並べ替える最も簡単な方法は通常Arrays.Sort()

関連する問題