У меня есть два поля, а именно идентификатор и имя. После вставки узла в связанный список я хотел бы отсортировать его по идентификатору в порядке убывания. Предполагая, что возможно, что разные люди могут иметь одинаковый идентификатор. Для примераСортировка с использованием связанного списка
1001 CHARICE -> 1001 JUSTIN -> 1001 ANNA -> 1000 CHYNA -> 888 MIKEY -> NULL
Окончательный список должен выглядеть следующим образом:
1001 ANNA -> 1001 CHARICE -> 1001 JUSTINE -> 1000 CHYNA -> 888 MIKEY -> NULL
сортировать имена с тем же ID в порядке возрастания, а идентификаторы сортируются в порядке убывания. Вот мой код:
NODE* insert_std(NODE *head, NODE* std){
NODE *prev, *cur;
if(head==NULL) return std;
cur = head;
while (cur != NULL && std->ID < cur->ID){
prev = cur;
cur = cur->next;
}
if(std->ID == cur->ID){
while (cur != NULL && strcmp(std->name, cur->name)>=0){
prev = cur;
cur = cur->next;
}
}
if (head==cur){
if(std->ID >= head->ID) {
std->next = head;
head = std;
}
} else {
std->next = cur;
prev->next = std;
}
return head;
}
Но это не сортируется так, как я этого хочу. Что я делаю не так?
Для сравнения строк используйте `strcmp` (или POSIX` strcasecmp`). – pmg 2010-12-15 17:02:20