选择排序在javascript中不起作用

时间:2012-12-17 03:42:17

标签: javascript

我正在尝试使用javascript的选择排序,但它似乎不起作用,有人可以帮助我吗? 我创建了一个对数组进行排序的函数, 然后我从文本框中获取值,并将其存储在名为inputString的数组中 然后我用逗号分割数组,并将其存储在名为inputNumbers的数组中 如果在我的文本框中存在非数字,则会显示错误,否则显示已排序的值。

function sortNow(form) {
    var nanExists = false;
    var inputString = document.getElementById("numberID").value;
    var inputNumbers = inputString.split(",");
    for (var a = 0; a < inputNumbers.length; a++) {
        inputNumbers[a] = parseInt(inputNumbers[a], 10);
        if (isNaN(inputNumbers[a])) {
            nanExists = true;
            break;
        }
    }

    inputNumbers = selectionSort(inputNumbers); //sort the array inputNumbers

    if (nanExists)
        form.answers.value = "Invalid Input";
    else
    {
        for(var b=0; b < inputNumbers.length; b++)
        {
            form.answers.value += inputNumbers[b];
        }
    }
    }
/* function to sort an array */
    function selectionSort(inputArray) {
    for(var i=0; i<inputArray.length; i++)
    {
        var currentMin = inputArray[i];
        var currentMinIndex = i;    
        for(var j=i+1; j<inputArray.length; j++)
        {
            if(currentMin > inputArray[j])
            {
                currentMin = inputArray[j];
                currentMinIndex = j;
            }
            if(currentMinIndex != i)
            {
                inputArray[currentMinIndex] = inputArray[i];
                inputArray[i] = currentMin;
            }
        }
    }
    return inputArray;
}

1 个答案:

答案 0 :(得分:1)

在您的代码中,请将以下代码段从内循环(j)移动到外循环(i)。

        if(currentMinIndex != i)
        {
            inputArray[currentMinIndex] = inputArray[i];
            inputArray[i] = currentMin;
        }

请参阅demo

请按如下方式对inputArray进行排序:

inputArray.sort(function(a,b) {
  return (a > b) ? 1 : ((a == b) ? 0 : -1);
});

您需要为Array.sort提供自定义排序函数,因为Array.sort()按字典顺序(按字典顺序)按照每个元素的字符串转换对数组进行排序。

查看有效的演示here

阅读MDN:Array.sort