Javascript按算法排序,jquery也许

好吧,我正在尝试创建一个排序应用程序,但它有点破坏了我的想法。 也许是因为思考太多了。

我想要的是什么

  1. 我想从数组中排序值,也许使用冒泡排序
  2. 我想将每次迭代推送到表的
  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  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('' + val); }) } } $(document).ready(function(){ sort.init(); }) 

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

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

演示 (JSFiddle)

 var SORT = function(type, list, selector){ var container, containerTr, animSteps = []; // Show all elements in the container var printArray = function(list){ var str = [""], i = 0, l = list.length; for (i; i < l; ++i) { str.push(""); } str.push("
", list[i], "
"); 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