2016-05-24 4 views
-1

В моем приложении java мне нужно объединить два упорядоченных массива сортировки с помощью пузырьков, я уже создал три потока, два потока для заказа первой и последней частей, и я подумал о том, чтобы третий поток объединил массивы заказов.Многопоточность, параллельная сортировка пузырьков

Может кто-нибудь предложить мне, как решить эту проблему?

ответ

0

Пусть main определить массив и создать 3 тему: «bubble1», «bubble2» и «слияние»:

int[] array= ... ; 
BubbleThread bubble1=new BubbleThread(array, 0, array.length/2); 
BubbleThread bubble2=new BubbleThread(array, array.length/2, array.length); 
Merger merger=new Merger(bubble1, bubble2); 
bubble1.start(); 
bubble2.start(); 
merger.start(); 

Нити «bubble1» относится пузырьковая сортировка с начала массива в длину/2 - 1. «слияние» ждет завершения двух потоков; затем объединяет две сортированные части:

public void run() { 
     bubble1.join(); 
     bubble2.join(); 
     // merge the sorted upper and lower halves of the array 
} 
+0

Но мне нужно объединить числа после каждой итерации внешнего цикла сортировки пузырьков. Спасибо – Julik

+0

Это неясно в вашем вопросе. Постарайтесь включить такие важные детали в свои будущие вопросы. Во всяком случае, эта синхронизация между слиянием и двумя сортировщиками пузырьков непростая. Вам нужно добавить синхронизированный метод в «BubbleThread», который называется «getNextNumber()», и сделать его «wait()» для следующего готового номера. 'Run()' из BubbleThread должен 'signal()' в конце каждой итерации внешнего цикла. – AhmadWabbi

+1

Спасибо за ответ. Можете ли вы написать код? – Julik

Смежные вопросы