我正在尝试做冒泡的东西。我正在使用此算法对2d数组进行排序,但不断出现错误。这是函数:
print(type(int(input[3])))
错误提示:var array = [
[ "Rober Hill" , 123.54 ],
[ "Chrsitopher Reddkin", 54.67 ],
[ "Maggie Woods" , 1000.87 ],
[ "Jennifer Jones" , 3.34 ],
[ "Marcus Parker" , 64.98 ]
];
table = document.getElementById("table");
function bubbleSort(array, length, element)
{
var swapped = false;
do
{
for (var a = 0; a < 5; a++) // Line 59
{
if (array[a][1] > array[a+1][1])
{
var temp = array[a][1];
array[a][1] = array[a+1][1];
array[a+1][1] = temp;
swapped = true;
}
}
} while(swapped);
return array;
}
。我在按钮上有此功能。任何帮助都很好!谢谢
答案 0 :(得分:1)
按原样运行代码,我得到:
Cannot read property '1' of undefined
这是因为在您进行比较时,您尝试比较array[a][1] > array[a+1][1]
,并且除了最后一个循环(array[a+1]
不存在,并且因为它不存在)之外,此方法还有效, 1未定义。
这是一个可行的解决方案,但有一些明显的区别。
length
和element
作为bubbleSort
的参数,但现在它们已经消失了5
。for
循环中,我从数组长度中减去1,因此我们永远不会尝试将最后一个项目与不存在的项目进行比较。i
代替a
,因为这是增量器的通用变量名。swapped
内定义了do...while
,否则您将创建一个无限循环,因为swapped
将在第一遍设置为true
并停留在{{ 1}}永远。true
时它会修改原始数组
bubbleSort
答案 1 :(得分:0)
在var swapped = false;
内移动do {...
。
还可以将for
中的条件更新为a < 4;
,或者最好将广义条件用作a < array.length - 1;
var array = [
["Rober Hill", 123.54],
["Chrsitopher Reddkin", 54.67],
["Maggie Woods", 1000.87],
["Jennifer Jones", 3.34],
["Marcus Parker", 64.98]
];
function bubbleSort(array, length, element) {
do {
var swapped = false;
for (var a = 0; a < array.length - 1; a++) // Line 59
{
if (array[a][1] > array[a + 1][1]) {
var temp = array[a][1];
array[a][1] = array[a + 1][1];
array[a + 1][1] = temp;
swapped = true;
}
}
} while (swapped);
return array;
}
console.log(bubbleSort(array));