我正在尝试使用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;
}
答案 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