-6

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();
    }
}

ヘルプやガイダンスをいただければ幸いです。

4

2 に答える 2

2

配列を印刷するためだけに同期された静的メソッドを作成して、ジョブを終了した最初のスレッドがロックを取得し、配列全体を印刷するときにのみ解放するようにしてください。

于 2013-04-05T12:31:54.357 に答える
1

行ではなく、別々の列に印刷してみませんか。

Bubblesort    Heapsort
3             
              4
5             
8
              7
11             
              9
16
              10
              17

これは、各結果を新しい行に出力し、並べ替えアルゴリズムに応じてインデントを調整するだけで、はるかに簡単に実現できます。

于 2013-04-05T12:45:01.907 に答える