【问题标题】:Javascript Sorting By Algorithm, jquery maybeJavascript按算法排序,jquery可能
【发布时间】:2013-02-10 18:20:52
【问题描述】:

好的,我正在尝试创建一个排序应用程序,但是这让我有点不知所措。可能是想太多了。

我想要什么

  1. 我想对数组中的值进行排序,可能使用冒泡排序
  2. 我想将每次迭代推送到表的<tr>
  3. 并且能够知道哪些值已被替换

必须发生的事情

  1. 每次迭代,我都会得到一个值列表
  2. 每个列表都会突出显示受影响的值

我目前拥有的

var sort = {
    init : function() {
        sort.vars.$oldList = [6,4,7,1,8];
        sort.play.bubble();
    }
}

sort.vars =  {
    $oldList : new Array(),
    $newList : new Array()
}

sort.play = {
    bubble : function() {
        var list = sort.vars.$oldList;
        var n = list.length;
        var isSorted = false;
        while(!isSorted) {
            var tmp, i;
            isSorted = true;
            for (i = 0; i < n; i++) {
                if (list[i] > list[i+1]) {
                    tmp = list[i];
                    list[i] = list[i+1];
                    list[i+1] = tmp;
                    isSorted = false;
                }
                sort.ui.pushtToTable(list);
            }
        }        
    }
}

sort.ui = {
    pushtToTable : function(list) {
        $.each(list, function(n, val){
            $('tr').append('<td>' + val);
        })
    }
}

$(document).ready(function(){
    sort.init();
})

如果可能的话,我想一个一个地显示值,也许设置一个超时,对吧?

【问题讨论】:

    标签: javascript jquery algorithm sorting


    【解决方案1】:

    是的,如果您想“查看”算法的进度,setTimeout 是个好主意。但是,setTimeout 只接受函数作为参数,因此排序算法的每次迭代都必须在单独的函数中执行。请参阅以下代码以获取示例(该代码不会在每次迭代中产生输出,而是“动画化”交换操作 - 但我相信您可以轻松调整它以满足您的需求)。

    DEMO (JSFiddle)

    var SORT = function(type, list, selector){
        var container, containerTr, animSteps = [];
        // Show all elements in the container
        var printArray = function(list){
            var str = ["<table>"], i = 0, l = list.length;
            for (i; i < l; ++i) {
                str.push("<tr><td>", list[i], "</td></tr>");
            }
            str.push("</table>");
            container.html(str.join(""));
        };
        // This is the interesting part... ;)
        var swap = function(list, i1, i2) {
            var tmp = list[i1];
            list[i1] = list[i2];
            list[i2] = tmp;
            // Add 3 functions for each swapping action:
            // 1. highlight elements, 2. swap, 3. remove highlight
            animSteps.push(function(){
                containerTr.eq(i1).add(containerTr.eq(i2)).addClass("highlight");
            }, function(){
                var tmp = containerTr.eq(i1).text();
                containerTr.eq(i1).text(containerTr.eq(i2).text());
                containerTr.eq(i2).text(tmp);
            }, function(){
                containerTr.eq(i1).add(containerTr.eq(i2)).removeClass("highlight");
            });
        };
        var animation = function(){
            // Execute all iteration functions one after another
            if (animSteps.length) {
                setTimeout(function(){
                    animSteps.splice(0,1)[0]();
                    animation();
                }, 250);
            }
        };
    
        // Collection of sorting algorithms
        var algorithms = {
            bubblesort: function(list) {
                for (var n = list.length; n > 1; --n) {
                    for (var i = 0; i < n-1; ++i) {
                        if (list[i] > list[i+1]) {
                            swap(list, i, i+1);
                        }
                    }
                }
            }
            // Add more algorithms using "swap" here...
        };
    
        if (algorithms[type] != undefined) {
            container = $(selector);
            printArray(list);
            containerTr = container.find("tr");
            algorithms[type](list);
            this.sorted = list;
            animation();
        }
    };
    
    // Usage:
    var s = new SORT("bubblesort", [5,8,2,4,1,9,7,3,0,6], "#container");
    console.log(s.sorted);    //the sorted array
    

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2018-03-02
      • 2012-08-21
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多