2 つの異なる並べ替えアルゴリズムを実装するプログラムがあります。両方のアルゴリズムを別々のスレッドで起動して、並行してテストしています。各スレッドで実行されているため、並べ替え操作の結果を表示できるようにしたいと考えており、これらの結果を同じ行 (スレッドごと) に保持しようとしています。
例:
Arr1= 3 5 8 11 16 ... (スレッド 1 からのソート出力)
Arr2= 4 7 9 10 17 ... (スレッド 2 からのソート出力)
Thread.sleep(xxx)
メインロジックの実行後にこれを達成しましたが、これはスレッドが 1 つしかない場合にのみ機能します。この遅延を両方のスレッドに入れると、次のように表示されます。
Arr1=
Arr2=Arr1 [i] Arr2[i] Arr1[i+1] Arr2[i+2] ...
つまり、両方のソートからの出力が同じ行に表示されます。
これが私のコードです:
import java.util.PriorityQueue;
class sortareBubbleSort extends Thread {
int nre, min, max;
public sortareBubbleSort(int nre, int min, int max) {
this.nre = nre;
this.min = min;
this.max = max;
}
public void run() {
int[] x = new int[nre];
for (int i = 0; i < x.length - 1; i++)
x[i] = min + (int) (Math.random() * ((max - min) + 1));
boolean doMore = true;
while (doMore) {
doMore = false;
for (int i = 0; i < x.length - 1; i++) {
if (x[i] > x[i + 1]) {
int temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
doMore = true;
}
}
}
System.out.println("\nHere is the sorted array with BubbleSort:");
for (int i = 0; i < x.length; i++)
System.out.print(x[i] + " ");
System.out.print("\n");
}
}
class sortareHeapSort extends Thread {
int nre, min, max;
public sortareHeapSort(int nre, int min, int max) {
this.nre = nre;
this.min = min;
this.max = max;
}
public void run() {
int[] x = new int[nre];
for (int i = 0; i < x.length - 1; i++)
x[i] = min + (int) (Math.random() * ((max - min) + 1));
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();
for (int w : x)
pQueue.add(w);
for (int k = 0; k < x.length; k++)
x[k] = pQueue.poll();
// Print the array
System.out.println("\nHere is the sorted array with HeapSort:");
for (int w : x)
System.out.print(w + " ");
}
}
public class TestThread {
public static void main(String args[]) {
sortareBubbleSort fir1;
sortareHeapSort fir2;
fir1 = new sortareBubbleSort(10, 1, 100);
fir2 = new sortareHeapSort(10, 100, 200);
fir1.start();
fir2.start();
}
}
ヘルプやガイダンスをいただければ幸いです。