Существует много алгоритмов сортировки, которые работают со связанными списками, и сортировка слиянием отлично работает в этом случае.Я написал более ранний ответ на вопрос о сортировке связанных списков , в котором рассматриваются многие классические алгоритмы сортировки связанных списков, а также их временные и пространственные сложности.В связанных списках можно использовать сортировку вставкой, сортировку выбора, сортировку слиянием и быструю сортировку.Приложив немного усилий, вы также получите работу с heapsort.Мой старый ответ содержит подробности о том, как это сделать.
Что касается вашего кода, обратите внимание, что во внутреннем цикле вы продвигаетесь на j
вперед, пока указатель next
не станет null
.На этом этапе вы никогда не переустанавливаете j
на что-либо еще, поэтому на каждой будущей итерации внешнего цикла внутренний цикл никогда не выполняется.Возможно, вам следует установить j = i.next
в начале каждой итерации.Более того, вы, вероятно, не хотите останавливать цикл, когда j.next
равен нулю, а когда j
равен нулю, так как в противном случае вы пропустите последний элемент массива.
Кроме того, сортировкаАлгоритм, который вы здесь написали, это сортировка выбора , а не пузырьковая сортировка, потому что вы делаете много проходов по связанному списку в поисках наименьшего элемента, который вы еще не позиционировали.Я не знаю, является ли это проблемой или нет, но я не был уверен, знали ли вы об этом.Тем не менее, я думаю, что это, вероятно, хорошо, поскольку пузырьковая сортировка в большинстве случаев менее эффективна, чем сортировка выбора (если список уже не близок к сортировке).
Надеюсь, это поможет!