经过几个小时的思考和修补,我几乎放弃了,但决定转向社区寻求帮助。我是C的新手,我刚刚学会了泡泡排序。例如,下面的代码按名称排序,我想要实现的是一个子排序,它也按人ID排序,我该怎么做或更改以下代码才能做到这一点? (这是结构问题)。
struct human {
char name;
char id;
}
function sorting(struct human person)
{
struct human temp
int i, unsorted;
do{
unsorted = 0;
for(i = o; i<count-1; i++)
{
if(strcmp(person[i].name, person.name) > 0)
{
temp = person[i];
person[i] = person[i+1];
person[i+1] = temp;
unsorted = 1;
}
}while(unsorted);
}
答案 0 :(得分:4)
首先,将比较函数分解为自己的函数会有所帮助:
int compare_people(struct human *person1, struct human *person2)
{
return strcmp(person1->name, person2->name);
}
然后,如果名称相同,您可以更轻松地更改逻辑以比较ID:
int compare_people(struct human *person1, struct human *person2)
{
int d = strcmp(person1->name, person2->name);
if (d == 0) {
return person2->id - person1->id;
} else {
return d;
}
}