细分如何对数组中的数字进行排序

时间:2016-03-25 03:15:07

标签: javascript arrays sorting

我正在查看this排序教程,我在理解它时遇到了问题。 我发现在将一个sortfunction传递给.sort()时,规则如下。

  
      
  • 小于0:排序" a"比" b"
  • 更低的指数   
  • 零:" a"和" b"应该被认为是平等的,并且没有进行分类。
  •   
  • 大于0:排序" b"比" a"。
  • 更低的索引   

我正在测试这个代码段:

var myarray=[25, 8, 7, 41];
console.log(myarray);
console.log(myarray.sort(function(a,b) {
    console.log("a : " , a , " b : " , b, " oper : " , b-a, " arr ");
    return b -a
}));

主要部分是return b -a,这应该按照我认为的降序返回数组,因为如果b大于a,它将被置于较低的索引中。我认为我很难确定"更低"手段。这是否意味着它直接在ab之前进入数组的开头?

这里是我感到困惑的地方。代码的结果是:

[25, 8, 7, 41]
a : 25  b : 8  oper : -17  arr
a : 8  b : 7  oper : -1  arr 
a : 7  b : 41  oper : 34  arr 
a : 25  b : 41  oper : 16  arr 
[41, 25, 8, 7]

这只是我的想法

因为前2个比较产生负ab之前,所以在前2个比较结束时,数组应该是[25,8,7,41](没有变化)。

然后下一个比较是一个正数(34),所以我认为ba之前,所以它现在是[25,8,41,7]然后我不知道为什么它比较25和41 next如何a = 25和b = 41?你能告诉我如何查看数组,因为它正在被转换我尝试这样做没有成功。提前谢谢。

如果您看到另一个问题,详细解释了这种排序细分,我将很乐意结束这个问题。我不是故意在SO上提出无用的问题。大多数tuts只解释如何排序一般但不分解。谢谢

1 个答案:

答案 0 :(得分:1)

  

那么有没有办法显示排序过程?就像你做的那样   循环你可以console.log活动你的循环。你能   console.log对数组进行排序所需的步骤?我猜不是。

使用Math.min()Math.max()的方法; Array.prototype.splice()

// `arr` : input array
function _sort(arr) { 
  // declare `min` variable
  // `res` : array that will be returned
  var min = null, res = []; console.log("step 1", min, res);
  // while `arr` contains elements
  while (arr.length) {
    // set `min` to smallest number in `arr`
    min = Math.min.apply(Math, arr); console.log("step 2", min);
    // push `min` to `res` array
    res.push(min); console.log(res);
    // remove `min` element from `arr` array
    arr.splice(arr.indexOf(min), 1); console.log("step 3", arr);
  }
  // return `res` array 
  return res
}

console.log("step 4", _sort([27, 1, 3, 14]))