Мне нужно закодировать параллельное приложение для сортировки слияния. Каждый раз, когда массив распадается, мне нужно создать новый поток для правой половины (максимальное число потоков - 5 -> так 5 раз), которое продолжает алгоритм Mergesort.concurrent Threads Merge Сортировка
Вот моя программа:
class Mergesorts implements Runnable{
private int[] internal;
Mergesorts(int[] arr) {
internal = arr;
}
private void processCommand(int [] array) {
if (array.length > 1) {
int[] left = leftHalf(array);
int[] right = rightHalf(array);
processCommand(left);
processCommand(right);
merge(array, left, right);
}
}
public int[] rightHalf(int[] array) {
int size1 = array.length/2;
int size2 = array.length - size1;
int[] right = new int[size2];
for (int i = 0; i < size2; i++) {
right[i] = array[i + size1];
}
return right;
}
public void run() {
processCommand(internal);
}
}
Как я могу переписать свой код, чтобы сортировать одновременно, как описано выше?
Как я могу изменить свой код, чтобы он создавал до 5 потоков и не более?
private void processCommand(int [] array) {
if (array.length > 1) {
int[] right = rightHalf(array);
int[] left = leftHalf(array);
Mergesorts worker2 = new Mergesorts(right);
Thread s = new Thread(worker2);
s.start();
processCommand(left);
try {
s.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
merge(array, left, right);}
}
И в чем вопрос? И кто на земле поднимает вопрос .... это не вопрос ?! – GhostCat
Вопрос в том, где в моем коде следует создавать новые потоки, которые продолжают делать один и тот же алгоритм – Merve
Я бы хотел, чтобы SO требовал от вас какого-то теста, прежде чем вы сможете публиковать сообщения. Таким образом у нас не было бы этих полуподобных вопросов. Требуется ненужное время, чтобы уговорить афера сформулировать вопрос в ответную форму. – Kayaman