0

我的应用程序中有这些排序算法,我想跟踪受影响的值,或者在排序过程中交换的值。我想强调它们。

我已经解决了冒泡排序和选择排序的这个问题,但不知何故我无法让它与插入排序和外壳排序一起使用。

这是我想要做的事情的小提琴:

http://jsfiddle.net/4jnXf/1/

如您所见,在迭代的最后一部分,这更像是插入排序,所以我不会问如何在插入排序中进行。最大的问题是迭代的第一部分、第二部分、第三部分,因为它没有任何意义。在迭代的最后一部分。我也强调了不交换的值。

我该如何纠正这一点。谢谢!这是错误的代码:

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');
},

我尝试按照下面的答案进行操作,但我无法正确回答,我错过了什么?

4

1 回答 1

0

就个人而言,我会尽可能将排序本身与跟踪分开。通过创建一个广义的跟踪对象来做到这一点:

  • 最初接受未排序的数组,记住它并打印它。
  • 当排序迭代时,接受数组的每个部分排序的版本,将其与先前的版本进行比较,并以适当的突出显示打印它。

这种方法有两个优点:

  • 在排序例程中,HTML 构建将减少到一行 - 一个简单的函数调用
  • 该范例将适用于所有排序算法。

编辑

这是一些代码:

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;
}

更新的小提琴

于 2013-03-17T08:29:17.560 回答