磁盘调度算法

#include<bits/stdc++.h>
using namespace std;

void sstf(int cur, vector<int>& tracks){
	int n = tracks.size(), total = 0;
	vector<int> visited;
	sort(tracks.begin(), tracks.end());
	// 先进行排序 体现排序贪心
	while(!tracks.empty()){
		int min_dis = INT_MAX, idx = -1;
		for (int i = 0; i < n; i ++) {
			int dis  = abs(tracks[i] - cur);
			if (dis < min_dis) {
				min_dis = dis;
				idx = i;
			}
		}
		total += min_dis;
		cur = tracks[idx];
		visited.push_back(cur);
		tracks.erase(tracks.begin() + idx);
	}
	
	for (int i = 0; i < visited.size(); i ++){
		cout << "current visited path:" << endl;
		cout << visited[i] << endl;
	}
	
	cout << "total move path:" << endl << total << endl;
	cout << "total via  path:" << endl << total << endl;
	cout << "average move path:" << endl;
	printf("%.2f\n", total * 1.0 / visited.size());
} 

void scan(int cur, vector<int>& tracks){
	sort(tracks.begin(), tracks.end());
	int idx = 0, n = tracks.size();
	for (; idx < n; idx ++){
		if(tracks[idx] >= cur ) break;
	}
	vector<int> path;
	for (int i = 0; i < n; i ++) path.push_back(tracks[i]);
	for (int i = idx - 1; i >= 0; i --) path.push_back(tracks[i]);
	
	int total = 0, now = cur;
	for (int i = 0; i < n; i ++) {
		total += abs(now - path[i]);
		now = path[i];
	}
	for (int i = 0; i < n; i ++) {
		cout << "current visited path:" << endl;
		cout << path[i] << endl;
	}
	cout << "total move path:" << endl << total << endl;
	cout << "total via  path:" << endl << total << endl;
	cout << "average move path:" << endl;
	printf("%.2f\n", total * 1.0 / n);
}

int main() {
	srand(time(0));
	int n, choice, cur;
	cout << "input tackle path count:" << endl;
	cin >> n;
	vector<int> tracks(n);
	
	cout << "random path number:" << endl;
	for (int i = 0 ; i < n; i ++){
		tracks[i] = rand() % 100;
		cout << tracks[i] << endl;
	}
	cout << "data produce success" << endl;
	
	while(1){
		cout << "algptirhm select" << endl;
		cout << "1. shortest search time algprithm" << endl;
		cout << "2. sacn algorithm" << endl;
		cout << "3. quit process" << endl;
		cout << "input method" << endl;
		cin >> choice;
		
		if(choice == 3) break;
		cout << "input current path number :" << endl;
		cin >> cur;
		if(choice == 1) sstf(cur, tracks);
		else if(choice == 2) scan(cur, tracks);
	}
	
} 

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务