У меня есть однопоточная версия сортировки слиянием http://pastebin.com/2uMGjTxr.
Он создает массив, заполняет его случайными числами и вызывает для него метод сортировки, который выполняет сортировку слиянием:
private static int[] sort(int[] array) {
//TODO: use multiple threads to speed up the sorting
return mergeSort(array, 0, array.length);
}
Теперь я хочу увеличить производительность, используя технику многопоточности в java. Код от моего наставника, и он сказал, что я должен что-то добавить к методу сортировки, но на самом деле это меня смущает.
Сортировка слиянием — это алгоритм «разделяй и властвуй»:
- Если список имеет длину 0 или 1, то он уже отсортирован. В противном случае:
- Разделите несортированный список на два подсписка примерно вдвое меньшего размера.
- Сортируйте каждый подсписок рекурсивно, повторно применяя сортировку слиянием.
- Объедините два подсписка обратно в один отсортированный список.
Так что я бы на самом деле начал поток для каждого подсписка. Что вы думаете? Как можно распараллелить сортировку слиянием в соответствии с данной реализацией? Кто-нибудь знает, почему я должен редактировать метод сортировки?