繁体   English   中英

Javascript从关联数组中找到最低编号(冒泡排序方法)

[英]Javascript finding lowest number from associative array (bubble sort method)

因此,我尝试将冒泡排序技术应用于关联数组。

我试着做一个普通的数组,然后应用冒泡排序。 这行得通,所以现在我尝试对关联数组执行相同的操作,但是我不明白为什么它行不通, 有人可以解释一下并告诉我如何执行此操作吗?

普通数组气泡排序代码: <-此代码有效

var numbers= new Array()

numbers[0] = 22;
numbers[1] = 3;
numbers[2] = 65;
numbers[3] = 75;
numbers[4] = 500;
numbers[5] = 2;
numbers[6] = 44;

for(var i=0; i<numbers.length; i++)
{
    if(numbers[i] < numbers[i+1])
    {
        var tempGetal = numbers[i];
        numbers[i] = numbers[i+1];
        numbers[i+1] = tempGetal;         
    }
}

console.log("Smallest number from array is " + tempGetal);

关联数组气泡排序代码: <-不起作用

var celsius= new Array()

celsius["Monday"] = 22;
celsius["Tuesday"] = 3;
celsius["Wednesday"] = 65;
celsius["Thursday"] = 75;
celsius["Friday"] = 1;
celsius["Saterday"] = 2;
celsius["Sunday"] = 44;

for(var temp in celsius)
{
    if(celsius[temp] < celsius[temp+1])
    {
        var tempGetal = celsius[temp];
        celsius[temp] = celsius[temp+1];
        celsius[temp+1] = tempGetal;
    }
}

console.log("Smallest number from this array is " + tempGetal[temp]);

谁能告诉我我尝试应用的方法是否可行?

提前致谢!

尝试失败的原因有多种,但您的假设存在一个根本缺陷:对象中属性的顺序未定义,因此您不应尝试重新排列它们。

确实没有理由为此使用排序。 只需遍历对象一次并找到最小值:

var min = Infinity;
for(var day in celsius) {
    if(celsius[day] < min) {
        min = celsius[day];
    }    
}
console.log(min);

更好的解决方案:

 var celsius = []; celsius["Monday"] = 22; celsius["Tuesday"] = 3; celsius["Wednesday"] = 65; celsius["Thursday"] = 75; celsius["Friday"] = 1; celsius["Saterday"] = 2; celsius["Sunday"] = 44; var min = Object .keys(celsius) .map(function(key) { return celsius[key]; }) .reduce(function(last, next) { return last < next ? last : next; }, Infinity); console.log(min); 

您的方法还有其他问题:

  • Javascript没有关联数组。 通常,您不应该创建一个数组并为其分配命名属性(这就是对象的用途)。
  • 如果使用for(var temp in celsius)遍历对象,则temp将是属性名称 ,而不是温度或数字索引。
  • 考虑到前一个项目符号,如果temp的值为"Monday" ,则celsius[temp + 1] = tempGetal会将tempGetal分配给属性Monday1

作为记录,您的气泡排序无法正常进行,因为您应该继续排序直到没有任何动作为止,例如

// Sort an array of Numbers
function bubbleSort(arr) {
  var oneMoved, // flag if one moved
      i,        // counter
      t;        // temp variable
  do {

    // reset flag 
    oneMoved = false;

    // reset counter
    i = arr.length - 1;

    while (i--) {

      // If array members are out of sequence, swap
      if (arr[i] > arr[i+1]) {
        t = arr[i];
        arr[i] = arr[i+1]
        arr[i+1] = t;

        // Remember that one moved
        oneMoved = true;
      }
    }

  // Keep going as long as one moved
  } while (oneMoved)

  // Not necessary as array sorted in place, but means function
  // can be chained
  return arr;
}

// Quick test
var arr = [0, 3, 6, -2, 3];

console.log(bubbleSort(arr)); // [-2, 0, 3, 3, 6]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM