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变量交换它们。我已经发布了一个带有更新功能的答案。