Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在js排序函数中运行预期输出_Javascript_Arrays_Function_Sorting_Output - Fatal编程技术网

Javascript 在js排序函数中运行预期输出

Javascript 在js排序函数中运行预期输出,javascript,arrays,function,sorting,output,Javascript,Arrays,Function,Sorting,Output,伙计们,我正在尝试对数组进行排序,但是我有一个小问题,排序开始了,但是 其中一个元素被标记为未定义,我不知道为什么。一般来说,我不确定调用函数的方式是否正确。请帮帮我 这就是代码: <p>JavaScript can change the content of an HTML element.</p> <button type="button" onclick="myFunction()">Click Me First!</button> <

伙计们,我正在尝试对数组进行排序,但是我有一个小问题,排序开始了,但是 其中一个元素被标记为未定义,我不知道为什么。一般来说,我不确定调用函数的方式是否正确。请帮帮我

这就是代码:

<p>JavaScript can change the content of an HTML element.</p>
<button type="button" onclick="myFunction()">Click Me First!</button>

<div id="demoto0">This is gonna be changed </div>
<div id="demoto1">This is gonna be changed </div>
<div id="demoto2">This is gonna be changed </div>
<div id="demoto3">This is gonna be changed </div>
<div id="demoto4">This is gonna be changed </div>
<div id="demoto5">This is gonna be changed </div>
<p> ---------------------------------------- </p>
<div id="demoto+0">This is gonna be changed </div>
<div id="demoto+1">This is gonna be changed </div>
<div id="demoto+2">This is gonna be changed </div>
<div id="demoto+3">This is gonna be changed </div>
<div id="demoto+4">This is gonna be changed </div>
<div id="demoto+5">This is gonna be changed </div>
<p id="flag"> false </p>
<script>
var arr = [1,2300, 94000, 34, 280, 294];
function selectionsort(cont){
    var ns = cont.ns;
    var n = cont.length;

    var n = arr.length;
    //var n = 6;
    for(var i=0; i<n-1; ++i)
    {
        var index = i; // markirame na4alna strelka ^
        for(var j=i+1; j<n; ++j)
        {
            // markirame sys strelki vseki element
            if(arr[index] > arr[j])
            {
                index = j;  
            }
        } 
        if(i != index)
        {
            var temp = arr[j];
            arr[j] = arr[index];
            arr[index] = temp;
        }
    }

    document.getElementById("flag").innerHTML = "Hello JavaScript!";

}

function myFunction() { 
    //var arr = [1,2300, 94000, 34, 280, 294];
    document.getElementById("demoto1").innerHTML = "Hello JavaScript!";
    document.getElementById("demoto0").innerHTML = arr[0];
    document.getElementById("demoto1").innerHTML = arr[1];
    document.getElementById("demoto2").innerHTML = arr[2];
    document.getElementById("demoto3").innerHTML = arr[3];
    document.getElementById("demoto4").innerHTML = arr[4];
    document.getElementById("demoto5").innerHTML = arr[5];

    //arr.sort(function(a,b){return a-b;});
    selectionsort(arr);

    document.getElementById("demoto+0").innerHTML = arr[0];
    document.getElementById("demoto+1").innerHTML = arr[1];
    document.getElementById("demoto+2").innerHTML = arr[2];
    document.getElementById("demoto+3").innerHTML = arr[3];
    document.getElementById("demoto+4").innerHTML = arr[4];
    document.getElementById("demoto+5").innerHTML = arr[5]; 
}
</script>

在这里,我为您修复了它,只是稍微更改了selectionsort函数。您需要使用一个temprary变量在迭代部分中使用j以及在末尾右键切换值。 这对我来说很好:

function selectionsort(cont){
var temp;
var n = cont.length;

for(var i=0; i<n-1; ++i)
{
    var index = i; // markirame na4alna strelka ^
    for(var j=i+1; j<n; ++j)
    {
        // markirame sys strelki vseki element
        if(cont[index] > cont[j])
        {
            temp = cont[j];
            cont[j] = cont[index];
            cont[index] = temp; 
        }
    } 
    if(i != index)
    {
        temp = cont[j];
        cont[j] = cont[index];
        cont[index] = temp;
    }
}

document.getElementById("flag").innerHTML = "Hello JavaScript!";

}

我在这里上传了一个JSFiddle:

您期望的输出是什么?请注意,JS中有一个标准的排序函数,您不必实现自己的。我不想很好地使用standart排序函数,我希望看到元素被排序,但我看到的却是:12309400034280294------------------123094000未定义34294 Hello JavaScript!主要问题在于循环中使用了j-而不是使index=j;您需要在index和j处获取数组的两个值,并使用temp变量交换它们。我已经发布了一个带有更新功能的答案。