Я пытаюсь сортировать несколько целых чисел, используя 4 потока, разбивая массив и затем рекомбинируя. Я думаю, что я выполнил использование 2 потоков, может ли кто-нибудь помочь отсюда, как я перейду к использованию 4?Сортировка с несколькими потоками
import java.util.Random;
import java.util.Arrays;
public class threadSort implements Runnable {
private static final int L = 64;
private static int[] nums;
private static Random rand;
public void run() {
//sorting upper half
Arrays.sort(nums, nums.length/2, nums.length);
}
public static void main(String args[]) throws InterruptedException {
nums = new int[L];
rand = new Random();
//fill the array
for(int i=0; i<nums.length; i++) {
nums[i] = rand.nextInt(10);
}
Thread t = new Thread(new threadSort());
t.start();
//sorting lower half
Arrays.sort(nums, 0, nums.length/2);
t.join();
/* merge */
int j = 0;
int k = nums.length/2;
int[] tmp = new int[nums.length];
for (int i=0; i<tmp.length; i++){
if (j < nums.length/2) {
if (k < nums.length) {
if (nums[j] < nums[k]) {
tmp[i] = nums[j++];
} else {
tmp[i] = nums[k++];
}
} else {
/* reached end of second half, copy first*/
tmp[i] = nums[j++];
}
} else {
/* reached end of 1st half, copy 2nd*/
tmp[i] = nums[k++];
}
}
nums = tmp;
//Testing Sort and Total
int count = 0;
for(int i=0; i<nums.length; i++){
System.out.print(nums[i] + " ");
count++;
}
System.out.println();
System.out.println("Total amount of Integers = " + count);
}
}
вот что я до сих пор я хочу, чтобы придерживаться того, что я имею, но бросить еще 2 темы в
Я бы рекомендовал рекурсивный подход, чтобы позволить массивы неопределенного размера. –
ну, я действительно просто хотел его для массива 64 ints. – Shonna
Надеюсь, это для домашней работы или личного образования. Сортировка 64 элементов обычно (в зависимости от реализации компаратора) такая простая операция, что накладные расходы при создании потоков и синхронизация модели памяти должны намного превышать любое увеличение производительности. –