Javascript中的排序算法

为jQuery函数$("#sort").click编写一个JavaScript回调$("#sort").click 。 允许用户以任何顺序输入三个数字。 按从低到高的顺序输出数字。

 $(document).ready(function() { $("#sort").click(function() { var a = Number($("#a").val()); var b = Number($("#b").val()); var c = Number($("#c").val()); var message = ""; if (b > c) { if ((b + c) > (a + c)) { message = c + " " + a + " " + b; } else { message = c + " " + b + " " + a; } } else { message = b + " " + a + " " + c; } if (b > a) { if ((a + b) > (a + c)) { message = a + " " + c + " " + b; } else { message = a + " " + b + " " + c; } } else { message = b + " " + c + " " + a; } $("#output").html(message) }); }); 

有人会介意看这段代码并说出错了吗?

这里有一些很棒的jQuery答案,我将介绍比较部分。

你不需要进行五次比较,只需三次(或两次,如果你很幸运的话)。 比较ab ,如果a > b ,则交换它们。 然后比较cb 。 如果c > b ,你就完成了,否则比较ca

 if (a > b) x = a, a = b, b = x; if (c < b) if (c < a) result = [c, a, b]; else result = [a, c, b]; else result = [a, b, c]; 

如果所有数字都是32位正数,则可以对它们进行排序而不进行任何比较:

 min = function(a,b) { return b + ((ab) & ((ab)>>31)) } max = function(a,b) { return a - ((ab) & ((ab)>>31)) } x = min(a, min(b, c)); z = max(a, max(b, c)); y = (a + b + c) - (x + z); result = [x, y, z]; 

这也是对的,但更好的是将所有值放入数组中。

获取所有元素值并将值推送到数组中,使用array.sort();;

排序数字(数字和升序):

 arrayname.sort(function(a, b){return ab}); 

排序数字(数字和降序):

 arrayname.sort(function(a, b){return ba}); 

代码最大的问题是它没有很好的组织。 不要使用嵌套的if语句来手动检查每个值的组合,而是尝试使用已经可用的工具和方法。

要对值进行排序,可以将它们放在一个数组中并在其上调用sort()。

 //Function to compare numbers function compareNumbers(a, b) { return a - b; } var a = Number($("#a").val()); var b = Number($("#b").val()); var c = Number($("#c").val()); //let's say a = 2, b = 3, c = 1 var arr = [a,b,c]; //The array arr is now [2,3,1] arr.sort(compareNumbers); //The array arr is now [1,2,3] 

现在,您可以按顺序从arr中获取元素来设置消息。

这是另一个(短期)解决方案:

 $(document).ready(function () { $("#sort").click(function () { var msg = [$("#a").val(), $("#b").val(), $("#c").val()].sort( function (a, b) { return a - b; }); alert(msg); }); }); 

尝试

 $("#sort").on("click", function (e) { var vals = $.map($("#a, #b, #c"), function (v, k) { return Number(v.value) }) , min = null , msg = ""; do { min = Math.min.apply(Math, vals); msg += min; vals.splice($.inArray(min, vals), 1) } while (vals.length > 0); $("output").html(msg) }); 
  $("#sort").on("click", function (e) { var vals = $.map($("#a, #b, #c"), function (v, k) { return Number(v.value) }) , min = null , msg = ""; do { min = Math.min.apply(Math, vals); msg += min; vals.splice($.inArray(min, vals), 1) } while (vals.length > 0); $("output").html(msg) });