2016-05-24 17 views
-1

私のJavaアプリケーションでは、2つをバブルソート配列でマージする必要があります。私は3つのスレッドを作成しています。マルチスレッド、並行バブルソート

誰かにこの問題の解決方法を教えてもらえますか?

答えて

0

mainは配列を定義し、3つのスレッドを作成してみましょう:「bubble1」、「bubble2」と「合併」:

int[] array= ... ; 
BubbleThread bubble1=new BubbleThread(array, 0, array.length/2); 
BubbleThread bubble2=new BubbleThread(array, array.length/2, array.length); 
Merger merger=new Merger(bubble1, bubble2); 
bubble1.start(); 
bubble2.start(); 
merger.start(); 

スレッド「bubble1」は長さに配列の先頭からバブルソートを適用します/ 2 - 1.「合併」は、2つのスレッドの終了を待ちます。

public void run() { 
     bubble1.join(); 
     bubble2.join(); 
     // merge the sorted upper and lower halves of the array 
} 
+0

しかし、バブルソートの外部サイクルの1回の繰り返しごとに番号をマージする必要があります。ありがとうございました – Julik

+0

あなたの質問ではっきりしていませんでした。あなたの将来の質問にそのような重要な詳細を含めるようにしてください。とにかく、合併と2つのバブルソーターの間のこの同期は容易ではありません。例えば、 "getNextNumber()"と呼ばれる "BubbleThread"に同期メソッドを追加し、次のレディ・ナンバーのためにそれを 'wait()'にする必要があります。 BubbleThreadの 'run()'は、すべての外部ループの繰り返しの終わりに 'signal()'する必要があります。 – AhmadWabbi

+1

お返事ありがとうございます。あなたはコードを書くことができますか? – Julik

関連する問題