import java.util.Scanner;

public class PRIORITYNP {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		
		Scanner sc = new Scanner(System.in);

        System.out.print("Enter number of processes: ");
        int n = sc.nextInt();

        int[] pid = new int[n];
        int[] AT = new int[n];
        int[] BT = new int[n];
        int[]PRIORITY=new int[n];
        int[] CT = new int[n];
        int[] TAT = new int[n];
        int[] WT = new int[n];
        int[]flag=new int[n];

        
        for (int i = 0; i < n; i++) {
            System.out.print("Enter process ID: ");
            pid[i] = sc.nextInt();
            System.out.print("Enter arrival time: ");
            AT[i] = sc.nextInt();
            System.out.print("Enter burst time: ");
            BT[i] = sc.nextInt();
            System.out.print("Enter Priority: ");
            PRIORITY[i]=sc.nextInt();
            
            
           
            
        }
        
        
        
        int total=0;
        int st=0;
        while(true) {
        	int c=n;
        	int min=99;
        	if(total==n)
        		break;
        	
        	for(int i=0;i<n;i++) {
        		if(AT[i]<=st && flag[i]==0 && PRIORITY[i]<min) {
        			min=PRIORITY[i];
        			c=i;
        		}
        	}
        	
        	if(c==n) {
        		st++;
        		
        	}
        	else {
        		CT[c]=st+BT[c];
        		st+=BT[c];
        		TAT[c]=CT[c]-AT[c];
        		flag[c]=1;
        		total++;
        	}
        }
        
        int totalTAT=0;
        int totalWT=0;
        
        for(int i=0;i<n;i++) {
        	TAT[i]=CT[i]-AT[i];
        	WT[i]=TAT[i]-BT[i];
        	totalTAT+=TAT[i];
        	totalWT+=WT[i];
        }
        
        
        
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                if (pid[j] > pid[j + 1]) {
                    
                    int temp = pid[j];
                    pid[j] = pid[j + 1];
                    pid[j + 1] = temp;

                    temp = AT[j];
                    AT[j] = AT[j + 1];
                    AT[j + 1] = temp;
                    
                    temp = BT[j];
                    BT[j] = BT[j + 1];
                    BT[j + 1] = temp;
                    
                    temp = PRIORITY[j];
                    PRIORITY[j] = PRIORITY[j + 1];
                    PRIORITY[j + 1] = temp;

                    
                    temp = CT[j];
                    CT[j] = CT[j + 1];
                    CT[j + 1] = temp;

                   
                    temp = TAT[j];
                    TAT[j] = TAT[j + 1];
                    TAT[j + 1] = temp;

                   
                    temp = WT[j];
                    WT[j] = WT[j + 1];
                    WT[j + 1] = temp;
                }
            }
        

        
        
        }
        System.out.println("\\nPID\\tAT\\tBT\\tPRIORITY\\tCT\\tTAT\\tWT");
        for ( int i = 0; i < n; i++) {
            System.out.println(pid[i] + "\\t" + AT[i] + "\\t" + BT[i] + "\\t" +PRIORITY[i]+"\\t"+"\\t"+
                               CT[i] + "\\t" + TAT[i] + "\\t" + WT[i]);
        
        
    }

double avgTAT = (double) totalTAT / n;
double avgWT = (double) totalWT / n;

System.out.printf("\\nAverage Turnaround Time: "+ avgTAT);
System.out.printf("\\nAverage Waiting Time: "+ avgWT);

sc.close();

	}

}

image.png