我在我的应用程序中有这些排序算法,我想跟踪受影响的值,或者在排序过程中交换的值。我想强调一下。
我已经解决了泡泡排序和选择排序这个问题,但不知何故我无法使用插入排序和shell排序。
以下是我要做的事情的小提琴:
正如您所看到的,在迭代的最后一部分,这更像是插入排序,所以我不会问如何在插入排序中执行此操作。最大的问题是迭代的第一部分,第二部分,第三部分,因为它没有任何意义。并在迭代的最后部分。我也强调了不交换的值。
我该如何纠正这个问题。谢谢! 这是错误的代码:
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');
},
我尝试按照下面的答案,但我无法做到正确,我错过了什么?
答案 0 :(得分:0)
就个人而言,我会尽可能地将分类本身与跟踪分开。通过创建一个通用的跟踪对象来执行此操作:
这种方法有两个好处:
以下是一些代码:
PrinterComparitor: function(container) {
var _arr, _container;
var init = function(container) {
_container = container.empty();
};
var printMessage = function(message) {
var $tr = $("<tr/>").addClass('message').appendTo(_container);
var $td = $("<td/>").text(message).appendTo($tr);
$td.attr('colspan', length);
setMessageSpans();
};
var setMessageSpans = function() {
var $messages = _container.find(".message");
var length = _container.find("tr").not($messages).filter(":last").find("td").length || 1;
$messages.find("td").attr('colspan', length);
};
var print = function(arr) {
var $tr = $("<tr/>").appendTo(_container);
var $td;
$.each(arr, function(i, val) {
$td = $("<td/>").text(val).appendTo($tr);
if(_arr && _arr[i] !== val) $td.addClass('affected');
});
_arr = $.extend(arr);
setMessageSpans();
};
init(container);
this.init = init;
this.print = print;
this.printMessage = printMessage;
}