关于操作系统动态分区最坏算法的程序输出有问题,求大神指教
#include"stdio.h"#define n 5
int turn(int k,int a[n][3])//用冒泡排序法对空闲块大小从大到小排序
{
int l,i,j,tem;
for(l=0;l<k;l++)
for(i=0;i<k-l;i++)
{
if(a[i][1]<a[i+1][1])
{
for(j=0;j<3;j++)
{
tem=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=tem;
}
}
}
}
main()
{
int i,j,k,l,m,tem,a[n][3],b[n];//a[][]数组是空闲块,b[]数组是作业数组
printf("请输入空闲块的个数:");
scanf("%d",&k);
printf("\n");
printf("请输入空闲块的分区号、大小、起址:\n");
printf("分区号\t大小\t起址\n");
for(i=0;i<k;i++)
{ for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("空闲区从大到小顺序为\n");
printf("分区号\t大小\t起址\n");
turn(k,a); //调用函数,使空闲块按空区从大到小输出
for(i=0;i<k;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
printf("请输入作业的数量:\n");
scanf("%d",&m);
printf("请输入作业的大小:\n");
for(l=0;l<m;l++)
{
scanf("%d",&b[l]);
printf("作业%d的大小为%d\n",l,b[l]);
}
for(l=0;l<m;l++) //对作业进行分配
{
if(b[l]>a[1][1])
printf("作业%d无法分配!\n",l);
else
{
for(i=0;i<k;i++)
if(b[l]<a[i][1])
{ a[i][1]-=b[l];
printf("作业%d分配在%d区!\n",l,a[i][0]);
break;
}
turn(k,a);//每分配一个作业后,空闲块会改变,所以要从新排序
}
}
printf("输出分配后的空闲块\n");
printf("分区号\t大小\t起址\n");
for(l=0;l<k;l++) //按分区号从小到大排序输出
for(i=0;i<k-l;i++)
{
if(a[i][0]>a[i+1][0])
{
for(j=0;j<3;j++)
{
tem=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=tem;
}
}
}
for(i=0;i<k;i++)
{
for(j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
按正确的分配后的输出应该是:
1 3 5
2 32 10
3 14 90
可是为什么我的会这样子?求指点!!