选择排序的实现有什么问题?

时间:2019-12-10 14:11:18

标签: javascript algorithm sorting selection quicksort

我正在学习选择排序。 对于某些值,我得到了正确的输出,但是对于所有值,我却没有得到正确的输出,不知道为什么?

请找到以下代码段:

SAXParseException: cvc-elt.1: Cannot find the declaration of element 'bpm-platform'.

1 个答案:

答案 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时,以避免丢失最后一个元素。