任务描述:
在名称字段中编写一个名为patient的结构,该结构包含患者的姓名(最多100个字符(,并将患者的出生年份(带符号整数(存储在名为birth_year的字段中。编写一个排序函数,其第一个参数是存储患者数据的数组,第二个参数是其参数是该数组的大小(带符号整数(。函数集按出生年份递增对患者阵列的元素进行排序。如果两个或多个患者具有相同的出生年份,则排序将保持原始顺序。(当然,项目的顺序应该仍然正确,只有同一出生年份的患者之间的顺序不应该改变为原来的顺序相比之下(
我的代码是:
struct patient{
char name[100];
int birth_year;
};
void sort(struct patient patients[], int n) {
struct patient temp;
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < (n - 1-i); j++)
{
if (patients[j].birth_year < patients[j + 1].birth_year)
{
temp = patients[j];
patients[j] = patients[j + 1];
patients[j + 1] = temp;
}
}
}
}
不幸的是,我不能给出主要函数,只能给出第一个测试用例,因为网站上的机器人程序总是测试这段代码,而其他数据是秘密的。
唯一的问题是我不知道如何反向排序。此外,由于某种原因,我的职能取代了同龄成员。
第一个结果必须是:
1989年
B 1995年
C 1995年
D 2001
E 2011年
而不是我得到的:
E 2011年
D 2001
B 1995年
C 1995年
1989年
我不知道如何反转排序
当您交换时,它是将一个项目向下推到列表中。因此,如果你想按升序放置物品,你想在时交换
patients[j].birth_year > patients[j + 1].birth_year
如果两名或两名以上患者的出生年份相同,则排序将保持原始顺序。
保留相等项目顺序的排序算法称为稳定排序。您使用的算法bubble sort是稳定的。