我正在学习选择排序。 对于某些值,我得到了正确的输出,但是对于所有值,我却没有得到正确的输出,不知道为什么?
请找到以下代码段:
SAXParseException: cvc-elt.1: Cannot find the declaration of element 'bpm-platform'.
答案 0 :(得分:1)
问题在于,除非执行循环内的minIdx
语句的主体,否则不会声明变量if
。如果最小元素位于索引0,则arr[i] < min
永远不为真,minIdx
未定义。
要解决此问题,请在循环之前编写var minIdx = 0;
,因为min
被初始化为索引0处的值。您还应该使用var
声明几个其他变量:
function selectionSortRecursion(arr, p) {
if(arr.length === 0) {
return p;
}
var min = arr[0];
var minIdx = 0;
for(var i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
minIdx = i;
}
}
var temp = arr[0];
arr[0] = arr[minIdx];
arr[minIdx] = temp;
p.push(arr.shift());
return selectionSortRecursion(arr, p);
}
请注意,由于无需将索引0与自身进行比较,因此我还将循环变量i
更改为1。并且递归的基本情况应该是arr.length
为0而不是1时,以避免丢失最后一个元素。