Модифицированная рекурсивная пузырьковая сортировка с потоками - PullRequest
0 голосов
/ 28 сентября 2019

Я должен сделать сортировку для университета, которая разбивает массив на две части и запускает поток для каждой половины.Если количество чисел в потоке превышает пороговое значение, оно снова разделит числа на два потока, если это не так, то будет сортировать числа по пузырьку.Затем полученные массивы объединяются родительским потоком.

Я включу написанный мной код:

public int[] bubbleSort4(int[] array, int threshold) {
        int middle = array.length/2;

        int[] array1;
        int[] array2;
        System.out.println("Whole array before sort" + Arrays.toString(array));

        array1 = Arrays.copyOfRange(array, 0, middle);
        System.out.println("Division before sort" + Arrays.toString(array1));
        array2 = Arrays.copyOfRange(array, middle, array.length);
        System.out.println("Division before sort" + Arrays.toString(array2));

        Thread t1 = new Thread(new BubbleSort4(array2, threshold));
        Thread t2 = new Thread(new BubbleSort4(array1, threshold));

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException ie) {
            ie.printStackTrace();
        }


        System.out.println("Divided array after sort" + Arrays.toString(array1));
        System.out.println("Divided array after sort" + Arrays.toString(array2));


        int[] result = merge(array1, array2);

        System.out.println("Merged divided arrays" + Arrays.toString(result));

        return result;
    }

// sorting thread
public class BubbleSort4 implements Runnable {
        private int[] ints;
        private int threshold;

        public BubbleSort4(int[] ints, int threshold) {
            this.ints = ints;
            this.threshold = threshold;
        }

        public void run() {
            if(ints.length > threshold) {
                bubbleSort4(ints, threshold);
            } else {
                bubbleSort1(ints);
            }
        }

    }

Вот результаты сортировки 6 случайных чисел с порогом 2 (Отлично работает на 4 номера):

Whole array before sort[95663, 385695, 80250, 338138, 157477, 160282]
Division before sort[95663, 385695, 80250]
Division before sort[338138, 157477, 160282]
Whole array before sort[338138, 157477, 160282]
Whole array before sort[95663, 385695, 80250]
Division before sort[338138]
Division before sort[95663]
Division before sort[157477, 160282]
Division before sort[385695, 80250]
Divided array after sort[338138]
Divided array after sort[95663]
Divided array after sort[157477, 160282]
Divided array after sort[80250, 385695]
Merged divided arrays[157477, 160282, 338138]
Merged divided arrays[80250, 95663, 385695]
Divided array after sort[95663, 385695, 80250]
Divided array after sort[338138, 157477, 160282]
Merged divided arrays[95663, 338138, 157477, 160282, 385695, 80250]
...