簡體   English   中英

到達時間不正確的SJF算法

[英]SJF algorithm with arrival time not working properly

typedef struct{
int tL; //Arrival time
int rafaga,id,tE,tP; //burst,id,waitTime,TimeAround     
} process;

int main(int argc, char** argv) {
int n= 3;
int i,j,rafagasum=0,k=1,rafagacomp;
process p[n],aux;
char id []= {'A','B','C','D','E','F'};
for(i=0;i<n;i++)
{
    printf(" Process burst %d: ",i);
    scanf("%d",&p[i].rafaga);
    printf("Arrival time %d: ",i);
    scanf("%d",&p[i].tL);
    p[i].id=id[i];



}

//Sort by arrival time

for (i=0;i<n;i++){
    for(j=0;j<n;j++){
     if(p[i].tL<p[j].tL){
        aux=p[j];
        p[j]=p[i];
        p[i]=aux;


     }

    }
}

for(j=0;j<n;j++){
    rafagasum=rafagasum+p[j].rafaga;
    rafagacomp=p[k].rafaga;
for(i=k;i<n;i++)
{

    if(rafagasum>p[i].tL && p[i].rafaga<rafagacomp)
    aux=p[k];
    p[k]=p[i];
    p[i]=aux;
    }   
    k++;
}
 // We calculate waiting time
p[0].tE=0; 

int sum=0;
for(i=1;i<n;i++){  
sum=sum+p[i-1].rafaga;
p[i].tE=sum-p[i].tL;
}

//We calculate Timearound
    int sum1=0;
    for(i=0;i<n;i++){

    sum1=sum1+p[i].rafaga;
    p[i].tP=sum1-p[i].tL;
}

printf(" ID   Turnaround  TWAit  \n ");

   for(i=0;i<n;i++){
    printf("%c \t  %d \t  %d \t  \n", p[i].id,p[i].tP,p[i].tE);
      }



    return 0;
   }

我想你們大多數人都知道該算法(SJF)應該做什么,我被告知編寫一個代碼,這就是我所得到的。 我決定使用包含時間和ID的結構“進程”。

我認為按到達時間排序的效果很好,但有時在printf上,我得到相同字母(流程)的2倍,而我得到的“時間間隔”和“等待時間”不正確,我也不知道該怎么做修正此問題,因為我認為我使用的公式正確。 你能幫忙的話,我會很高興。

無論在什么地方說“ rafaga”,意思是“爆發時間”

SJF算法中,首先根據到達時間 進行排序,然后根據突發時間進行排序。

現在查看您的排序代碼,似乎您正在使用選擇排序 ,並且您的代碼不正確。 內部循環總是從一個索引開始,比外部索引更多,因此j = i + 1 ,而不是j = 0正確的排序是:

for (i = 0;i < n;i++){

    for(j = i+1;j < n;j++)
    {
     if(p[i].tL < p[j].tL){

     aux=p[j];
     p[j]=p[i];
     p[i]=aux;
     }

    }
}

另外,您對burst time的排序看起來不正確。 照顧好這些小事情,您的代碼將是正確的。 附帶一提,一旦您了解了基礎知識, SJF是最簡單的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM