私はIDと名前の2つのフィールドを持っています。リンクされたリストにノードを挿入すると、降順でIDでソートしたいと思います。異なる人が同じIDを持つ可能性があると仮定します。例リンクされたリストを使用した並べ替え
1001 CHARICE -> 1001 JUSTIN -> 1001 ANNA -> 1000 CHYNA -> 888 MIKEY -> NULL
について最終的なリストは、次のようになります。
1001 ANNA -> 1001 CHARICE -> 1001 JUSTINE -> 1000 CHYNA -> 888 MIKEY -> NULL
IDが降順にソートされている間、私は昇順で同じ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;
}
しかし、私はそれを望むようにソートされていないです。私は間違って何をしていますか?
に
&& std->ID == cur->ID
を追加します。 – pmgこれは便利です:http://en.wikipedia.org/wiki/Sentinel_node – ruslik
クイックソートアルゴを使ってこの問題の解決策を見つけてください。 –
user1596193