麻烦大佬们能不能帮我优化一下这道题的算法,实在想不出来怎么优化了。

问题描述:现有一个内存为100K的采用位示图进行页面管理的道数不受限制的多道程序设计系统,若作业调度采用高优先级(优先数越大优先级越大)调度算法(如果遇到优先级一样且只能调入一道作业时,按照输入顺序选择调度对象。),进程调度采用非剥夺式的SJF调度算法(如果遇到运行时间相同的进程,按照输入顺序选择调度对象。)。要求输入3个进程信息,输出当三个作业同时提交进入调度时进程的运行顺序。

 

输入格式:程序要求输入3行,以回车符号作为分隔,每行有4个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名;第2个数据类型为整型,表示进程所需的内存空间;第3个数据类型为整型,表示进程的运行时间;第4个数据类型为整型,表示进程的优先数。

 

输出格式:输出1行,M个字符串,字符串之间用空格作为分隔。

 

样例输入1:

P1 20 2 1

P2 60 3 2

P3 30 4 3

样例输出1:

P2 P1 P3

 

样例输入2:

P1 80 2 2

P2 30 5 3

P3 40 3 1

样例输出2:

P3 P2 P1

#include<stdio.h>
#include<time.h>
clock_t start,stop;
double runtime;
int mspace=100;//总的内存空间数 
struct process{
	char pname[10];//进程名 
	int sspace;//占用空间数 
	int rtime;//运行时间 
	int priority;//优先数 
}p[3];

int main(){
	start=clock();
	struct process x[3];
	int index;	//标志位 
	for(int i=0; i<3; i++){
		scanf("%s %d %d %d",p[i].pname,&p[i].sspace,&p[i].rtime,&p[i].priority);
	}
	for(int i=0; i<3; i++){
		for(int j=i+1; j<3; j++){
			if(p[i].priority<p[j].priority){
				struct process temp;
				temp=p[i];
				p[i]=p[j];
				p[j]=temp;
			}
		}
	}
	/*
	for(int i=0; i<3; i++){
		printf("%s ",p[i].pname);
	}*/
	for(int i=0; i<3; i++){
		if(mspace>=p[i].sspace){
			mspace-=p[i].sspace;
			for(int j=i; j<i+1; j++){
				x[j]=p[i];
				index=i;
			}
			if(index>0){
				if(x[i-1].rtime>x[i].rtime){
					struct process temp=x[i];
					x[i]=x[i-1];
					x[i-1]=temp;
					mspace+=x[i-1].sspace;
				}else{
					mspace+=x[i-1].sspace;
				}
			}
		}else{
			if(i<2){ 
				struct process temp=p[i+1];
				p[i+1]=p[i];
				p[i]=temp;
				i--;
			}else{
				x[2]=p[2];
				mspace+=x[i-1].sspace;
				i--;
				break;
			}
		}	
	}
	printf("%s %s %s",x[0].pname,x[1].pname,x[2].pname);
	stop=clock();
	runtime=((double)(stop-start));
	printf("\n%lfs",runtime);
}

 

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

解决没?