http://pt.wikipedia.org/wiki/Merge_sort#Java そのコードはコンパイルされません。誰もこのマージソートを修正する方法を知っていますか?
ありがとうございます。
http://pt.wikipedia.org/wiki/Merge_sort#Java そのコードはコンパイルされません。誰もこのマージソートを修正する方法を知っていますか?
ありがとうございます。
マージソートに関する英語のWikipediaの記事にリンクされているhttp://rosettacode.org/wiki/Merge_sort#Javaの実装例です。
import java.util.LinkedList;
public class Merge<E extends Comparable<? super E>> {
public LinkedList<E> mergeSort(LinkedList<E> m){
if(m.size() <= 1) return m;
int middle= m.size()/2;
LinkedList<E> left= new LinkedList<E>();
for(int i= 0;i < middle;i++) left.add(m.get(i));
LinkedList<E> right= new LinkedList<E>();
for(int i= middle;i < m.size();i++) right.add(m.get(i));
right= mergeSort(right);
left= mergeSort(left);
LinkedList<E> result= merge(left, right);
return result;
}
public LinkedList<E> merge(LinkedList<E> left, LinkedList<E> right){
LinkedList<E> result= new LinkedList<E>();
while(!left.isEmpty() && !right.isEmpty()){
//change the direction of this comparison to change the direction of the sort
if(left.peek().compareTo(right.peek()) <= 0) result.add(left.remove());
else result.add(right.remove());
}
result.addAll(left);
result.addAll(right);
return result;
}
}
System.arraycopy
への電話でposicao
を使用しているスコープエラーがあります。その変数をmesclar
メソッドの始めに(底部のforループの内部ではなく)宣言するとコンパイルされますが、必ずしもロジックの良さを意味するとは限りません。また、forループ内のネストされたifステートメントは、そのような割り当てに使用することはできません。ネストされた三項演算子はこのトリックを行いますが、他の誰かがそれを理解することを幸運にします。代わりに、vetor[inicio + posicao]
への割り当ては、ブロックのifブロック内に複製する必要があります。
これはコードサンプルです....これは完全に実装されたクラスとしてはとらないでください。 –
私は完全に実装されたクラスとしてそれを取っていませんでした。コードサンプルとしては失敗します。 – gdejohn
"コンパイルできません"はエラーの説明が不十分です。さらに、英語のWikipediaには、実際にはOpenJDKのJava実装の2つのリンクがあります。 –
いずれにしても、宿題でない限り、組み込みのArrays.sort()を使用することをお勧めします。 ;) –
どちらかお気楽ですか? asnwer Answer:D – Seva