在C中从结构排序、比较和显示
我需要要求用户插入进程数、进程ID和等待时间 然后我必须根据进程优先级进行排序、比较和打印 我是C语言的新手,我不知道怎么做 谢谢你的帮助 提前谢谢*/在C中从结构排序、比较和显示,c,comparison,C,Comparison,我需要要求用户插入进程数、进程ID和等待时间 然后我必须根据进程优先级进行排序、比较和打印 我是C语言的新手,我不知道怎么做 谢谢你的帮助 提前谢谢*/ struct Process { int Id; int Prio; int Time; }; struct Process process[100]; void init() { printf("Enter number of processes:\n "); scanf("%d",&n); while(
struct Process {
int Id;
int Prio;
int Time;
};
struct Process process[100];
void init() {
printf("Enter number of processes:\n ");
scanf("%d",&n);
while(n<3) {
printf("Number has to be grater than 2\n");
scanf("%d",&n);
}
for (int x=0; x<n; x++) {
printf("Process %d ID:\n ", x+1);
scanf("%d",&process[x].Id);
printf("Process %d priority:\n ", x+1);
scanf("%d",&process[x].Prio);
printf("Process %d time:\n ", x+1);
scanf("%d",&process[x].Time);
}
}
void priority() {
for (int x=0; x<n; x++) {
printf("%d",process[x].Id);
printf(" %d",process[x].Prio);
printf(" %d\n\n",process[x].Time);
}
}
void line(int dashes) {
for(int x=1;x<dashes;x++) {
printf("-");
}
}
void display() {
printf("\n");
printf(" PROCESS SCHEDULING\n");
line(90);
printf("\n");
printf("ID");
printf(" PRIORITY");
printf(" WAITING TIME");
line(90);
printf("\n\n");
}
int main() {
init();
display();
priority();
return 0;
}
struct进程{
int-Id;
国际普里奥;
整数时间;
};
结构过程[100];
void init(){
printf(“输入进程数:\n”);
scanf(“%d”和“&n”);
而(n对于排序,您可以应用任何排序算法(冒泡排序、插入排序、堆排序…),但在比较相邻元素时,请比较它们的优先级
if(process[index1].Prio < process[index2].Prio)
if(进程[index1].Prio<进程[index2].Prio)
这是一个基本排序算法BubbleSort的实现。这不是你能找到的最好的算法,但它是最容易理解的算法之一。参考
void sortprocess()
{
int right_bound=n-1;/*假设已声明n为输入的进程数*/
进程交换;
while(右边界>0)
{
for(int i=0;i进程[i+1].Prio)
{
swap.Id=进程[i+1].Id;
swap.Prio=进程[i+1].Prio;
swap.Time=进程[i+1]。时间;
进程[i+1].Id=进程[i].Id;
//…以优先权和时间为准;
进程[i].Id=swap.Id;
//…我指的是Prio和Time
右上界--;
}
}
}
}
如果我理解您的问题,您需要根据优先级对流程进行排序,只需应用任何排序算法并按process.priority进行比较。您的问题到底是什么?Sintax?这是一个作业吗?您遵循哪一个教程?您是否尝试编译此代码(变量“n”在哪里)?哪个编译器?这是哪个操作系统?这是一个赋值IssamTP。我想我不知道要应用的算法/sintax。我已经定义了变量“n”在我的代码上面。代码正在运行,但只打印输入的数据。好的,然后你会在下面找到我的答案。在init和display之间插入调用。让我知道。如果它有效,请接受它。非常感谢你们。我使用了另一个for循环而不是While循环。有更多的方法来做同样的事情。
void SortProcesses()
{
int right_bound = n - 1; /* Assuming you've declared n as number of processes inputed. */
Process swap;
while( right_bound > 0 )
{
for( int i = 0; i < right_bound; i++ )
{
if( process[i].Prio > process[i + 1].Prio )
{
swap.Id = process[i+1].Id;
swap.Prio = process[i+1].Prio;
swap.Time = process[i+1].Time;
process[i+1].Id = process[i].Id;
// ... idem for Prio and Time;
process[i].Id = swap.Id;
// ... idem for Prio and Time
right_bound--;
}
}
}
}