从最小到最大排序数组中的三个数字

时间:2017-07-06 20:40:49

标签: javascript arrays sorting for-loop numbers

我必须创建一个需要3个数字的函数。该函数应返回一个包含从最小到最大的数字的数组。到目前为止,我有这个。我知道它不正确,但它是一个开始。我也没有使用本机功能。谁能给我一些提示?感谢任何帮助。

   function leastToGreatest (num) {
        var array = [];
        var num1 = 0;
        var num2 = 0;
        var num3 = 0;
        for (var i = 0; i < num.length; i++) {
           if(num[i] < num[i] && num[i] < num[i]) {
                  num[i] = num1;
                  array.push(num1);
           }
           else if(num[i] > num[i] && num[i] < num[i]) {
             num[i] = num2;
             array.push(num2);
           }
           else if(num[i] > num[i] && num[i] > num[i])
             num[i] = num3;
             array.push(num3);
           }
           return array;
     }
     leastToGreatest(2,1,3);

6 个答案:

答案 0 :(得分:1)

我建议使用两个for循环来解决这个问题。例如,

function sortArray(array) {
  var temp = 0;
  for (var i = 0; i < array.length; i++) {
    for (var j = i; j < array.length; j++) {
      if (array[j] < array[i]) {
        temp = array[j];
        array[j] = array[i];
        array[i] = temp;
      }
    }
  }
  return array;
}

console.log(sortArray([3,1,2]));

使用此函数,无论数组的大小如何,它总是会对它进行排序。

您的功能不起作用的原因(如@WashingtonGuedes所述)是您每次都在比较相同的值。如他们所说,您将到达最后一个语句并收到两个false,这会导致您对所有三个false语句测试if。然后,您返回的数组将为空。

一个建议是不像你所做的那样对三个值进行硬编码,而是假设什么都没有让程序付出艰苦的努力。正如我的代码片段中所示,您可以输入任意长度的数组,它将被排序,而不仅仅是长度为3的位置。

答案 1 :(得分:0)

您现在的代码现在无法正常工作,因为您正在将数字与自身进行比较,因此它始终相等(导致您的排序无效)。要获得有效的排序,您可以解决此问题或使用array.prototype.sort

答案 2 :(得分:0)

这是一个有趣的小变化:

&#13;
&#13;
var sortingFunction = function(){ 
  console.log([].slice.apply(arguments).sort(function(a, b) {  return a - b; })); 
}


sortingFunction(3,2,5,1);
&#13;
&#13;
&#13;

您可以传入任意数量的数字,而不仅仅是三个。如果要将其限制为3,可以在函数中对其进行测试:

&#13;
&#13;
var sortingFunction = function(){ 
  var values = [].slice.apply(arguments);
  if(values.length === 3) {
    console.log(values.sort(function(a, b) {  return a - b; })); 
  }
  else
  {
    console.log('you didn\'t pass in three values');
  }
 }


sortingFunction(3,2,5,1);


sortingFunction(3,31,1);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

如果您只想要一个数字从最小到最大排列的数组,可以使用sort()方法和以下参数:

array.sort(function(a,b){return(a-b)});

&#13;
&#13;
var array = [12,7,18,1];
array.sort(function(a,b){return (a-b)});
console.log(array); //Array should be arranged from least to greatest
&#13;
&#13;
&#13;

答案 4 :(得分:0)

如果您想要排序的只有三个项目,您可以通过三次比较和交换轻松完成:

if (num[0] > num[1])
{
    // swap num[0] and num[1]
    temp = num[0]; num[0] = num[1]; num[1] = temp;
}
if (num[0] > num[2])
{
    // swap num[0] and num[2]
    temp = num[0]; num[0] = num[2]; num[2] = temp;
}

// at this point, num[0] contains the smallest of the three numbers

if (num[1] > num[2])
{
    // swap num[1] and num[2]
    temp = num[1]; num[1] = num[2]; num[1] = temp;
}

// your three items are sorted

这很容易用手证明是正确的。在小纸片上写下数字1,2和3,按随机顺序排列,然后执行上述步骤。无论你从哪个顺序开始,这都会对这三个项目进行排序。

明白,以上只适用于三个项目。如果你想要一种方法来排序任意数量的项目,那么你将需要使用内置的排序方法。

答案 5 :(得分:0)

var sort = function ([x, y, z]) {
  var k = [x, y, z];
  k[0] = Math.min(x, y, z);

  if ((x < y && x > z) || (x < z && x > y)) {
    k[1] = x;
  }
  else if ((y < x && y > z) || (y < z && y > x)) {
    k[1] = y;
  }
  else {
    k[1] = z;
  }

  k[2] = Math.max(x, y, z);
  return k;
};