2012-03-21 13 views
0

私は自分でJavaを学ぼうとしていますが、この本の質問の1つは私を私に渡しています。 MergeSortスタイルをソートした後、2つのArrayListをマージすることです。重大な災害がなければ、私はそれらを一緒に戻すことはできません。私は本当にそれを知りたいので、私は上に移動することができます、それはナットを運転しています。2人のarraylistsをマージすることはできません

public <E extends Comparable<?super E>> void merge(List<E> front, List<E> back, boolean last, List<E> result){ 
    int i = 0; 
    int j = 1; 
    while (!front.isEmpty() && !back.isEmpty()) { 
     if (front.get(0).compareTo(back.get(0)) <= 0) { 
      result.add(result.size() -1, front.remove(0)); 
      System.out.println("works" + result); 
      } else { 
      result.add(result.size() -1, back.remove(0)); 
      System.out.println("no work" + result); 
      } 
    } 
    while (!front.isEmpty()) { 
     result.add(result.size() -1,front.remove(0)); 
    } 
    while (!back.isEmpty()) { 
     result.add(result.size() - 1, back.remove(0)); 
    } 
System.out.println(); 
} } 

ブール値は、それらをソートすることです。真==昇順、偽==降順。私はそれについて心配することができた。どんなタイプの助けもありがとう。

+2

* "...そして本の質問の1つが私のものを私に渡しています" *。これはどんな言語ですか?それは英語のようには見えません。 (21歳以上の人、英語以外の人がいることを覚えておいてください) –

+2

「大災害」とはどういう意味ですか?何が具体的に間違っていますか?それは例外をスローしますか?それはコンパイルされませんか?予期しない結果を返すか? –

答えて

0

arraylistがソートされている場合は、それらをループして、一方の端で最小要素を取ります(昇順を望む場合)。リストの1つが空になるまでこれを行います。次に、残りのリストのエントリをマージされたリストに追加します。

+0

あなたは私を失礼する必要があります、私はまだ理解していません。 – IC2D

+0

@ user1217522less参照http://www.algolist.net/Algorithms/Merge/Sorted_arraysと http://stackoverflow.com/questions/5958169/how-to-merge-two-sorted-arrays-into-a-sorted -アレイ – Adrian

1

私は、あなたがしなければならないすべては、次のように変更

result.add(front.remove(0)); 

とelse節でも同じ変更を行うことだと思います。

結果リストの最後に要素を追加するには、インデックスを指定しないでください。

0

私がマージを実装するのに使った安全な方法は、次のようなものでした。

public <E extends Comparable<? super E>> void merge(List<E> front, 
      List<E> back, boolean last, List<E> result) { 
     int i = 0; 
     int j = 0; 
     Collections.sort(front); 
     Collections.sort(back); 
     while (!(i == front.size() && j == back.size())) { 
      E e; 
      if (i == front.size()) { 
       // If we have exhausted the 'front' then copy whatever is in 
       // 'back' 
       e = back.get(j); 
       // Move back index to next 
       j++; 
      } else if (j == back.size()) { 
       // If we have exhausted the 'back' then copy whatever is in 
       // 'front' 
       e = front.get(i); 
       // Move front index to next 
       i++; 
      } else { 
       if ((front.get(i).compareTo(back.get(j)) <= 0)) { 
        // front item will be added, increment front index for next 
        e = front.get(i); 
        i++; 
       } else { 
        // back item will be added, increment back index for next 
        e = back.get(j); 
        j++; 
       } 
      } 
      result.add(e); 
     } 
     if(last){ 
      Collections.reverse(result); 
     } 
    } 
関連する問題