Я действительно написал (правильно) многопоточный QuickSort на Java, так что, возможно, я могу немного помочь ...
Вопрос здесь для всех, кто интересуется:
Многопоточная быстрая сортировка или слияние
Какова цель переменной
tdepth
Как прокомментировали другие, он служит для определения, создавать ли новые темы или нет.
Это считается "правильным"
реализация параллели
быстрая сортировка? Я спрашиваю, потому что это не
использовать реализует Runnable или расширяет
Автор ...
Я не думаю, что это правильно по нескольким причинам: во-первых, вы должны сделать это зависимым от процессора. Нет смысла создавать 16 потоков на процессоре с одним ядром: однопоточная быстрая сортировка должна превосходить многопотоковую на одноядерном компьютере. На 16-ядерных машинах, конечно, запускается до 16 потоков.
Runtime.getRuntime().availableProcessors()
Тогда вторая причина, которая мне действительно не нравится, заключается в том, что она использует детали низкоуровневого Java-потока прошлого века: я предпочитаю держаться подальше от .join () и использовать более высокий уровень вещи (см. fork / join в другом вопросе или что-то вроде CountDownLatch'es и т. д.). Проблема с низкоуровневыми вещами, такими как «объединение» потоков в Java, заключается в том, что они не несут никакого полезного значения: они на 100% специфичны для Java и могут быть заменены средствами потоков высокого уровня, концепция которых переносима на разные языки.
Тогда не комментируйте случайное воспроизведение в начале. Когда-либо. Я видел набор данных, где QuickSort ухудшается в квадрате, если вы удалите этот случайный порядок. И это просто O (N) Shuffle, который не замедлит ваш вид:)
Если это не так, возможно ли это
изменить этот код, чтобы использовать несколько
потоки? Проходя в число
темы, которые вы хотите использовать в качестве
параметр, например ...?
Я бы попытался написать и / или повторно использовать реализацию, используя средства параллелизма более высокого уровня. Посмотрите советы в вопросе, который я задал здесь некоторое время назад.