繁体   English   中英

Javascript中的磁盘调度SSTF

[英]Disk Scheduling SSTF in Javascript

我正在编写有关磁盘调度的演示文稿-Javascript中的SSTF,但是当我运行时,控制台可以继续运行,但是很长一段时间都不会显示结果或错误。 我猜我的代码在某处是错误的,但我无法弄清楚。 你们能帮我吗? 非常感谢你! 对不起,我不好意思!

 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)); 

请记住,js索引从0开始,而不是1。因此,您必须在代码中将“ 1”更改为“ 0”。

if (a > b) {
    headMove += b;
}

应该

if (a > b) {
    headMove += b;
    arr.splice(headStart, 1);
}

删除当前值以在while块开始时正确执行检查。

导致代码永久运行的主要原因是您没有像我上面所说的那样删除“ arr”中的项目。 然后,headStart仍然停留在某处,并且“中断”从未发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM