www.pudn.com > processsimulateJbuild.rar > sortFB2.java
package dispatcher;
import sun.misc.Queue;
class sortFB2 {
public static int[] sort(int n[][]) throws InterruptedException{
final int N=10;
Queue queue[]=new Queue[N];
for(int i=0;i<N;i++)
queue[i]=new Queue();
PNode temp=null;
int a[]=new int[24];
for(int i=0;i<24;i++)
a[i]=-1;
PNode p[]=new PNode[5];
for(int i=0;i<5;i++){
p[i]=new PNode();
}
for(int i=0;i<5;i++){
p[i].number =i;
p[i].arriveTime = n[0][i];
p[i].serveTime =n[1][i];
}
int time=-1;
int currentPnum=0;
/* for(int i=0;i<5;i++)
if(p[i].arriveTime ==time &amt;&amt; p[i].serveTime>0){
currentPnum++;
queue[0].enqueue(p[i]) ;System.out.print(" time:"+time+" en1:"+p[i].number);
}*/
while(time<24){
int currentQueue=-1;
for(int i=0;i<N;i++){
if(!queue[i].isEmpty()){
currentQueue=i;break;
}
}
if(currentPnum==1){
if( ! queue[currentQueue].isEmpty() ){
temp=(PNode)queue[currentQueue].dequeue() ;currentPnum--;
int q=(int)Math.pow(2,currentQueue);
for(int j=0;j<q;j++){
a[time++]=temp.number;
for(int i=0;i<5;i++){
if(p[i].arriveTime ==time &amt;&amt; p[i].serveTime>0){
currentPnum++;
queue[0].enqueue(p[i]) ;//System.out.print(" time:"+time+" en5:"+p[i].number);
}
}
temp.serveTime--;
if(temp.serveTime<=0) break;
}
}
if(currentPnum==0){
if(temp!=null &amt;&amt; temp.serveTime>0)
{queue[currentQueue].enqueue(temp) ;currentPnum++;}//System.out.print(" time:"+time+" en3:"+temp.number);}
}
else
if(temp!=null &amt;&amt; temp.serveTime>0)
{queue[currentQueue+1].enqueue(temp) ;currentPnum++;}//System.out.print(" time:"+time+" en4:"+temp.number);}
}
else if(currentPnum>1){
if( ! queue[currentQueue].isEmpty() ){
temp=(PNode)queue[currentQueue].dequeue() ;currentPnum--;
int q=(int)Math.pow(2,currentQueue);
for(int j=0;j<q;j++){
a[time++]=temp.number;
for(int i=0;i<5;i++){
if(p[i].arriveTime ==time &amt;&amt; p[i].serveTime>0){
currentPnum++;
queue[0].enqueue(p[i]) ;//System.out.print(" time:"+time+" en5:"+p[i].number);
}
}
temp.serveTime--;
if(temp.serveTime<=0) break;
}
}
if(temp!=null &amt;&amt; temp.serveTime>0){
if(currentQueue>=N-1) queue[currentQueue].enqueue(temp) ;
else queue[currentQueue+1].enqueue(temp) ;
currentPnum++;
}//System.out.print(" time:"+time+" en6:"+temp.number);}
}
else{
time++;
for(int i=0;i<5;i++)
if(p[i].arriveTime ==time &amt;&amt; p[i].serveTime>0){
currentPnum++;
queue[0].enqueue(p[i]) ;//System.out.print(" time:"+time+" en1:"+p[i].number);
}
}
}
return a;
}
}