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