int main()
{
vector<int> nums={23,376,205,132,19,61,190,398,29,4,18,40};
sort(nums.begin(),nums.end());
int res=0;
int tmp=0;
int target=100;
while(nums.size()>0){
tmp=0;
for(int i=0;i<nums.size();i++){
if(abs(nums[tmp]-target)>abs(nums[i]-target)){
tmp=i;
}
}
res+=(abs(target-nums[tmp]));
target=nums[tmp];
nums.erase(nums.begin()+tmp);
}
return 0;
} 使用最短寻道时间优先(SSTF)算法,从磁头当前位置100开始,每一步选择距离当前磁道最近的请求进行处理,模拟过程如下:
起始位置100,最近请求132(距离32),移至132,寻道长度32。
位置132,最近请求190(距离58),移至190,寻道长度58,累计90。
位置190,最近请求205(距离15),移至205,寻道长度15,累计105。
位置205,最近请求61(距离144),移至61,寻道长度144,累计249。
位置61,最近请求40(距离21),移至40,寻道长度21,累计270。
位置40,最近请求29(距离11),移至29,寻道长度11,累计281。
位置29,最近请求23(距离6),移至23,寻道长度6,累计287。
位置23,最近请求19(距离4),移至19,寻道长度4,累计291。
位置19,最近请求18(距离1),移至18,寻道长度1,累计292。
位置18,最近请求4(距离14),移至4,寻道长度14,累计306。
位置4,最近请求376(距离372),移至376,寻道长度372,累计678。
位置376,最后请求398(距离22),移至398,寻道长度22,累计700。
总寻道长度 = 700,请求数 = 12,平均寻道长度 = 700 / 12 ≈ 58.3。