Я должен сделать сортировку для университета, которая разбивает массив на две части и запускает поток для каждой половины.Если количество чисел в потоке превышает пороговое значение, оно снова разделит числа на два потока, если это не так, то будет сортировать числа по пузырьку.Затем полученные массивы объединяются родительским потоком.
Я включу написанный мной код:
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]