- 论坛徽章:
- 0
|
回复 9# cokeboL
为了便于调试,我增加了点输出语句:- #include <stdio.h>
- #include <stdlib.h>
- void task_sort(int task[], int task_num, int max_task_num)
- {
- int i, j;
- int *count = (int*)malloc(sizeof(int)*max_task_num);
- for(i=0; i<max_task_num; i++){
- count[i]=0;
- }
- for(i=0; i<task_num; i++){
- count[task[i]]++;
- }
- for(i=0, j=0; i<task_num; j++){
- while( (count[j]-- > 0) && i<task_num ){
- task[i++] = j;
- }
- }
- free(count);
- }
- void Scheduler(int task[], int task_num, int max_task_num, int system_task[], int user_task[])
- {
- int i=0, n=0, j;
- task_sort(task, task_num, max_task_num);
- printf("task[]:\n");
- for(j = 0; j < task_num; j++){
- printf("%d ", task[j]);
- }
- printf("\n");
- while(task[n]<50){
- system_task[n]=n++;
- }
- system_task[n]=-1;
- printf("system_task:\n");
- for(j = 0; j < task_num; j++){
- printf("%d ", system_task[j]);
- }
- printf("\n");
- while(task[n]<=255){
- user_task[i++]=n++;
- }
- user_task[n]=-1;
- printf("user_task:\n");
- for(j = 0; j < task_num; j++){
- printf("%d ",user_task[j]);
- }
- printf("\n");
- }
- int main()
- {
- int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99},
- system_task[20],
- user_task[20];
- Scheduler(task, sizeof(task)/sizeof(int), 300, system_task, user_task);
- return 0;
- }
复制代码 g++编译后,您程序的运行结果是:
task[]:
0 1 30 40 80 99 155 170 300
system_task:
0 1 2 3 -1 104126944 -1075139896 13049472 -163754450
user_task:
4 5 6 7 1 -1 2691008 103209324 -1
gcc编译后输出是:
task[]:
0 1 30 40 80 99 155 170 300
system_task:
0 1 2 3 -1 0 0 0 -163754450
user_task:
4 5 6 7 1 0 0 0 -1
说明,你排序后,改变了task[]的内容,再定位时,得到的位置数据是不正确的。
没弄明白7后面的1是怎么来的????但“user_task[n]=-1;”我想你的本意是“user_task=-1;”
|
|