3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到
system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。
例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
我的方法:
#include<stdio.h>
#include<stdlib.h>
void scheduler(int task[],int system_task[],int user_task[], int len);
void BubbleSort(int task[], int A[], int len);//冒泡排序
int main(void)
{
int *task = (int *)malloc(sizeof(int));
int key;
int i = 0;
int *system_task = (int *)malloc(sizeof(int));
int *user_task = (int *)malloc(sizeof(int));
printf("请输入任务优先级,按#结束\n");
while (scanf("%d", &key) == 1)
{
task[i] = key;
i++;
}
scheduler(task, system_task, user_task, i - 1);
}
void scheduler(int task[], int system_task[], int user_task[], int len)
{
int i;
int j = 0;
int t = 0;
for (i = 0; i <= len; i++)
{
if (task[i] < 50)
{
system_task[j] = i;
j++;
}
if (task[i] >= 50 && task[i] <= 255)
{
user_task[t] = i;
t++;
}
}
BubbleSort(task, system_task, j - 1);
BubbleSort(task, user_task, t - 1);
printf("system_task[]=:");
for (i = 0; i <= j - 1; i++)
printf("%d ", system_task[i]);
system_task[j] = -1;
printf("%d",system_task[j]);
printf("user_task[]=:");
for (i = 0; i <= t - 1; i++)
printf("%d ", user_task[i]);
user_task[j] = -1;
printf("%d", user_task[j]);
}
void BubbleSort(int task[],int A[], int len)
{
int i, j;
bool flag;
for (i = len; i >= 0; i--)
{
flag = false;
for (j = 0; j < i; j++)
{
if (task[A[j]]>task[A[j + 1]])
{
int temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
flag = true;
}
}
if (flag == false)
break;
}
}
这个问题中利用了冒泡排序,其实主要是排序问题。那么下面是我的结果