我的算法不起作用,我是所有算法和javascript的新手,我似乎无法解决为什么它不起作用。
这是阵列(23,19,35,12,30)
最大值= 0
这就是我所拥有的......
For K= 0 to n – 2
MAX = 0
For j = 0 to n – k - 2
If item[j] > item[MAX]
MAX = item[j]
end if
end for
swap n - k - 2 with item[MAX]
end for
end SelectionSort
我哪里出错了?谢谢!!!!
另外,如果有人能告诉我如何在跟踪表中使用它,我会非常高兴!
亲切的问候 克雷格
答案 0 :(得分:1)
在此表达式中使用max导致问题项[MAX],它将是j。请仔细考虑,然后再次尝试,选择排序Demo
var arr = new Array (23, 19, 35, 12, 30);
temp = 0;
for( k = 0; k < arr.length-1; k++)
{
for( j = k+1; j < arr.length; j++)
{
if (arr [k] > arr [j])
{
temp = arr[k];
arr[k] = arr[j];
arr[j] = temp;
}
}
}
for(k = 0; k < arr.length; k++)
alert(arr[k]);
答案 1 :(得分:0)
我相信你的代码中有一些错误。首先,两个地方的上限应该是n - k -1而不是n -k-2(因此如果已经是最大值,则不要移动索引为n-k-1的元素)。您还应该将项目[n-k-1]与项目[MAX]交换(不是您编写的索引)。我相信这样的事情应该有效:
For K= 0 to n – 1
MAX = 0
For j = 0 to n – k - 1
If item[j] > item[MAX]
MAX = item[j]
end if
end for
swap item[n - k - 1] with item[MAX]
end for
end SelectionSort