Я пытаюсь выполнить сортировку сортировки в связанном списке, используя рекурсию, и у меня возникли проблемы с разбиением связанного списка вокруг узла с наименьшим значением на каждом проходе через мою рекурсивную функцию сортировки , Я пытаюсь получить узел с наименьшим значением, разделяю связанный список по наименьшему значению, добавляю наименьшее на передний план, присоединяюсь к двум секционированным спискам и затем снова выполняю сортировку в объединенном секционированном списке до тех пор, пока весь связанный список сортируется. Например:Как связать связанный список с минимальным значением
q w e r t // partition around e
e -> q w r t // join the partitions
eq -> w r t // append q to e
eq -> w r t // partition around r
и пр.
Мой метод сортировки:
Node.prototype.sort = function(){
if(!next){
return this;
} else {
var a = null;
var b = null;
var smallest = this.smallest();
splitIt(smallest, a, b);
appendSmallest(smallest);
a.join(b);
a.sort();
}
}
я получаю самый маленький узел так:
Node.prototype.smallest = function(){
if(!next) return this;
var sm = next.smallest();
if(sm.data < this.data){
return sm;
}
return this;
}
Вот мой Append и методы соединения:
Node.prototype.appendSmallest = function(smallest){
if(!next) next = smallest;
}
Node.prototype.join = function(otherNode){
if(!next) next = otherNode;
else next.join(otherNode);
}
У меня возникли некоторые проблемы реализуя метод splitIt
рекурсивно. Что такое псевдокод для такой операции?
Если '.smallest' функция вернула пару' [previous_node, the_smallest_node] ', расщепление было бы тривиально. Если первый узел является наименьшим, 'previous_node' является' null'. – 9000