0

我正在尝试对 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;
}
4

1 回答 1

1

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

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

查看演示

请像这样对 inputArray 进行排序:

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

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

在此处查看工作演示

阅读MDN:Array.sort

于 2012-12-17T04:41:00.390 回答