最短寻道时间优先算法-C++

1.算法解析

最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。比如现有需要读取的数据的柱面次序为:35 12 73 230 80 20 310 120,初始柱面为65号,当65操作结束后,应该先处理73号柱面的请求,然后到达80号柱面执行操作,随后处理120号柱面请求,后继操作的次序应该是35、20、12、230、310。

采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了400多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。

2.代码

①最短寻道时间优先算法函数SSTF()

int SSTF(int *cyclist, int *cycorder, int n, int start){
//参数:cyclist[] 输入的待操作的柱面数组,cycorder[] 操作柱面的顺序结果
//     n 柱面的个数,start 初始的柱面号
//返回值:sum SSTF的走道总和
	int sum, min, mid, index, tag[100] = {0};
	sum = 0;
	for(int j=0; j<n; j++){    //此循环得出cycorder[]和累加sum
		min = 9999;    //将最小值初始化为无穷大
		for(int i=0; i<n; i++)  //次循环得出距离start最小值min
			if(tag[i] == 0){
				mid = abs(start - cyclist[i]);
				if(min > mid){
					min = mid;
					index = i;   //记录下与start最近柱面的下标
				}
			}
		sum += min;
		tag[index] = 1;          //将标记数组置为1,表示已经将其柱面进行操作
		cycorder[j] = cyclist[index];
		start = cyclist[index];
	}
	return sum;
}

②全部代码

#include<iostream>
#include<cmath>
using namespace std;

int SSTF(int *cyclist, int *cycorder, int n, int start){
	int sum, min, mid, index, tag[100] = {0};
	sum = 0;
	for(int j=0; j<n; j++){
		min = 9999;
		for(int i=0; i<n; i++)
			if(tag[i] == 0){
				mid = abs(start - cyclist[i]);
				if(min > mid){
					min = mid;
					index = i;
				}
			}
		sum += min;
		tag[index] = 1;
		cycorder[j] = cyclist[index];
		start = cyclist[index];
	}
	return sum;
}

int main(){
	int cyclist[100], cycorder[100], n, start;
	cout<<"请输入初始柱面和待执行柱面数量:";
	cin>>start>>n;
	cout<<"请输入待执行柱面:";
	for(int i=0; i<n; i++)
		cin>>cyclist[i];
	cout<<"磁头走过总道数为:"<<SSTF(cyclist, cycorder, n, start)<<endl;
	cout<<"SSTF走道顺序为:";
	for(int i=0; i<n; i++){
		cout<<cycorder[i];
		if(i+1 != n)
			cout<<" -> "; 
	}
	return 0;
}
/*
65 8
35 12 73 230 80 20 310 120
*/

3.运行结果
在这里插入图片描述

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瘦瘦无感

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值