• 最短寻道优先算法----SSTF算法


    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处。


    该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短


    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
    }
    


    测试:


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    苦逼也聊模式--(0)--开篇
    发现无力吐槽
    JS函数调用
    初步使用nodejs(一)
    测试一下
    达摩流浪者
    Revit:二开使用Sqlite保存本地数据,并配合EF6等ORM框架
    Revity:查找并修改类型参数和实例参数
    复习一下UML
    Revit:ElementFilter过滤器基类
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931790.html
Copyright © 2020-2023  润新知