再帰を使用してリンクリストの選択ソートを実行しようとしていますが、再帰的ソート機能を通過するたびに最小値を持つノードのリンクリストを分割する際に問題があります。 。最小の値を持つノードを取得しようとしています。リンクされたリストを最小値の周りに分割し、最小のものを前面に追加し、2つの分割リストを結合し、連結リスト全体がソートされるまで、ソートされます。たとえば、リンクされたリストを最小値の周りに分割する方法
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;
}
は私のアペンドであり、メソッドへの参加:
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