C:结构中的sort和subsort值如何

时间:2014-07-22 01:58:24

标签: c sorting

经过几个小时的思考和修补,我几乎放弃了,但决定转向社区寻求帮助。我是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);
}

1 个答案:

答案 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;
    }
}