我正在编写一个关于磁盘调度的演示 - 在Javascript中使用SSTF 当我运行时,控制台继续运行但很长时间没有显示结果或错误。我想我的代码在某处错了,但我无法弄清楚。 你们能帮助我吗?非常感谢你! 对不起,我的坏Eng!
var arr = [53, 98, 183, 37, 122, 14, 124, 65, 67];
//shortest seek time first
function sstf(arr) {
var headFirst = arr[0];
arr.sort(function(a, b) { return a - b });
var headStart = 0;
var headMove = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] == headFirst) {
headStart = i;
break;
}
}
while (true) {
//
if (headStart === 1 || headStart === arr.length) {
break;
}
//define local a, b which are the distance between the next and the previous of the current index
if (arr[headStart - 1] === "undefined") {
a = arr[headStart] - arr[headStart];
} else {
a = arr[headStart] - arr[headStart - 1];
}
if (arr[headStart + 1] === "undefined") {
b = arr[headStart] - arr[headStart];
} else {
b = arr[headStart + 1] - arr[headStart];
}
//compare a & b
if (a < b) {
headMove += a;
var temp = headStart;
arr.splice(headStart, 1);
headStart = temp - 1;
} else if (a > b) {
headMove += b;
}
}
//check if headStart = at the beginning going forward or at the last going backward
if (headStart === 1) {
for (var i = 1; i < arr.length; i++) {
headMove += Math.abs(arr[i] - arr[i - 1]);
}
} else if (headStart === arr.length) {
for (var i = arr.length - 1; i > 1; i--) {
headMove += Math.abs(arr[i - 1] - arr[i])
}
}
return headMove;
}
console.log(sstf(arr));
答案 0 :(得分:0)
请记住,js索引从0开始,而不是1.因此,您必须在代码中将某些“1”更改为“0”。
if (a > b) {
headMove += b;
}
应该是
if (a > b) {
headMove += b;
arr.splice(headStart, 1);
}
删除当前值以在while块开始时正确执行检查。
主要原因是你的代码永远在运行,你不会像我上面所说的那样删除“arr”中的项目。然后headStart仍然卡在某处,“休息”永远不会发生。