#include<stdio.h>
typedef struct
{
int index;
int a;
int b;
}job;
void Johnson(job* m,int n);
void swap(job*a,job*b);
int min(int a,int b){
return a>b?b:a;
}
int main(){
job m[7];
int a[7] = {5,3,6,4,8,9,6};
int b[7] = {2,4,7,2,9,7,3};
int i = 0;
printf("ss");
for(;i<7;i++){
m[i].index = i;
m[i].a = a[i];
m[i].b = b[i];
}
Johnson(m,7);
printf("最优调度为:");
for(i=0;i<7;i++){
printf("%d ",m[i].index+1);
}
return 0;
}
void Johnson(job* m,int n){
int i=0,j=n-1;
int p;
if(n==1) return;
while(i!=j){
while(m[j].a>=m[j].b&&i<j){
j--;
}
while(m[i].a<m[i].b&&i<j){
i++;
}
if(i<j){
swap(m+i,m+j);
}
}
p = i;
for(i=1;i<=p;i++){
job temp = m[i];
j = i-1;
while(j >= 0&&temp.a<m[j].a){
m[j+1] = m[j];
j--;
}
m[j+1] = temp;
}
for(i=n-2;i>p;i--){
job temp = m[i];
j = i+1;
while(j<n&&temp.b<m[j].b){
m[j-1]=m[j];
j++;
}
m[j-1] = temp;
}
}
void swap(job* x,job* y){
job temp = *x;
*x = *y;
*y = temp;
}