アプリケーションにこれらの並べ替えアルゴリズムがあり、影響を受ける値、または並べ替えプロセス中に交換された値を追跡したいと考えています。それらを強調したいと思います。
バブルソートとセレクションソートでこの問題を解決しましたが、どういうわけか挿入ソートとシェルソートでうまくいきません。
これが私がやろうとしていることのフィドルです:
ご覧のとおり、反復の最後の部分は挿入ソートに似ている可能性が高いため、挿入ソートでそれを行う方法については質問しません。大きな問題は、イテレーションの最初の部分、2 番目の部分、3 番目の部分です。意味がないからです。そして、反復の最後の部分。スワップしない値も強調表示します。
どうすればこれを修正できますか。ありがとうございました!欠陥のあるコードは次のとおりです。
shell: function() {
var list = anada.vars.$list;
$.each(list, function(key, value){
if (!isNaN(list[key])) {
list[key] = parseInt(list[key]);
} else {
}
});
var n = list.length;
var increment = Math.floor(n / 2);
var i;
while (increment > 0) {
var unsorted = list;
for (i = increment; i < n; i++) {
var temp = list[i];
var j = i;
while (j >= increment && list[j - increment] > temp) {
list[j] = list[j - increment];
j -= increment;
}
list[j] = temp;
var rows = '<tr>';
for (ctr = 0; ctr < unsorted.length; ctr++) {
if (list[ctr] !== unsorted[ctr]) {
rows += '<td class="affected">' + list[ctr];
} else {
rows += '<td>' + list[ctr];
}
}
anada.vars.$elements.push(rows);
}
increment = Math.floor(increment / 2);
var row = '<tr>';
anada.app.generateIterationList(list);
}
anada.app.generateTable('result-shell', 'Result of Shell Sort');
},
以下の回答に従ってみましたが、うまくいきません。何が欠けていますか?