gpt4 book ai didi

javascript - 我可以对订购一组 n 个号码的程序进行哪些改进?

转载 作者:行者123 更新时间:2023-11-28 10:44:56 25 4
gpt4 key购买 nike

我刚刚学习如何用 javascript 编程,并且制作了我的第一个“做某事”的程序。我没有寻求算法任何部分的帮助,只是在某些部分寻找我想要使用的函数的名称。这个算法似乎有效,但当你有一个很大的数字列表(例如 10 或更多)时,它似乎无法完成。你觉得怎么样?完全没有效率吗?

var totNum = Number(prompt("How many numbers you want to compare"));
var unordNum = new Array(totNum);
var ordNum = new Array();
for( var i=1 ; i<= totNum; i++){
unordNum[i] = Number(prompt("Write a new number","0"));
}
while(ordNum.length < totNum){ // I will repeat this process until I order all numbers
for(var i=1; i <=totNum; i++){ //choose a number, lets call it X
if(!(ordNum.indexOf(unordNum[i]) >=0)){ //if it is already ordered, skip it
var z = 0;
for(var j=1; j<=totNum; j++){ //I will compare X against all the others numbers, except
if(!(ordNum.indexOf(unordNum[j]) >= 0)){ //the ones that are already ordered
if( unordNum[i] >= unordNum[j]){ //if X is bigger than a number,
z++; // add 1 to z
}
if(z==totNum-ordNum.length){ // this means X is bigger or equal than all the other numbers
ordNum.push(unordNum[i]); //so write X in the first empty space of the ordered list
}
}
}
}
}
}
document.write(ordNum + "<br>");

最佳答案

您使用ordNum.indexOf(unordNum[j])查找一个数字是否已经排序。如果出现重复,这将导致无限循环。其次,你并没有真正排序,你会推送一个数字以获得第一次比较成功。下面是一个有点类似的排序逻辑。

var totNum = Number(prompt("How many numbers you want to compare"));
var unordNum = new Array(totNum);
var ordNum = new Array();
for( var i=0 ; i< totNum; i++){
unordNum[i] = Number(prompt("Write a new number","0"));
}

for(var i=0; i <totNum; i++){
if(unordNum[i] == undefined) continue; //jump to the next unsorted number
var smallest = unordNum[i]; //initialize smallest to be the first unsorted number
var index = i; //initialize marker index to be set as undefined at last for the number being moved to the sorted array
for(var j=0; j<totNum; j++){ //Comparison loop to find the smallest
if(unordNum[j] != undefined){
smallest = unordNum[j]<smallest ? unordNum[j] : smallest; //Swap if j th number is smaller
index = smallest == unordNum[j] ? j : index; // update index if swapping done
}
}
unordNum[index] = undefined;//mark the number moved
ordNum.push(smallest); // add smallest number to sorted array
i=0; //set outer loop to start from 0 again
}

document.write(ordNum + "<br>");

这将通过将剩余数组中的最小数字复制到新数组中来排序。而不是使用 ordNum.indexOf(unordNum[j])正如您所做的那样,我将排序后的元素标记为 undefined 。在您的情况下,无法对重复项进行排序。这将使新的排序数组小于输入数组,从而导致无限循环。还有一点,为什么用1作为起始索引呢? Javascript 中的默认索引也是从 0 开始。

有更好的排序算法,但也许这不是您正在寻找的。

关于javascript - 我可以对订购一组 n 个号码的程序进行哪些改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44973704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com