gpt4 book ai didi

Javascript 按算法排序,jquery 也许

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:47 25 4
gpt4 key购买 nike

好吧,我正在尝试创建一个排序应用程序,但它有点让我心烦意乱。可能是想太多了。

我想要的

  1. 我想对数组中的值进行排序,可能使用冒泡排序
  2. 我想将每次迭代推送到 <tr>一张 table
  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();
})

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

最佳答案

是的,如果您想“查看”算法的进度,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

关于Javascript 按算法排序,jquery 也许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com