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 に答える