請珍惜小編勞動成果。該文章為小編原創,轉載請注明出處。
該算法選擇這種進程。其要求訪問的磁道與當前磁頭所在的磁道距離近期。以使每次的尋道時間最短
java代碼實現例如以下:
import java.util.List; import java.util.Scanner; //最短尋道時間優先 public class SSTF { private int shortIndex=0; private int visit[]; //訪問序列 public int[] sstf(int data[],int begin){ int nearest=99999; //近期的值,變量 visit=new int[data.length]; for(int j=0;j<data.length;j++){ for(int i=0;i<data.length;i++){ if(data[i]!=-1){ if(Math.abs(nearest-begin)>Math.abs(data[i]-begin)){ nearest=data[i]; shortIndex=i; } } } visit[j]=nearest; data[shortIndex]=-1; begin=nearest; nearest=99999; } return visit; } public void print(int visit[],int begin){ for(int i=0;i<visit.length;i++){ System.out.print(visit[i]+" "); } int length=0; for(int i=0;i<visit.length-1;i++){ length+=Math.abs(visit[i]-visit[i+1]); } length+=Math.abs(begin-visit[0]); System.out.println("平均尋道長度為"+length/visit.length); } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("請輸入請求個數"); int num=scanner.nextInt(); System.out.println("請輸入請求序列。空格隔開"); int data[]=new int[num]; for(int i=0;i<num;i++){ data[i]=scanner.nextInt(); } SSTF sstf=new SSTF(); System.out.println("請輸入起始頭位置"); int begin=scanner.nextInt(); sstf.print(sstf.sstf(data,begin),begin); } //98 183 37 122 14 124 65 67 }
測試: