6

そのため、番号のランダムなリストを与える割り当てがあり、挿入ソートを使用してそれらをソートする必要があります。単独でリンクされたリストを使用する必要があります。他の投稿を見回しましたが、役に立たないようです。挿入ソートとは何かはわかりましたが、コードで記述する方法がわかりません。

Node* insertion_sort(Node* head) {
  Node* temp = head_ptr;
  while((head->n < temp->n) && (temp != NULL))
    temp = temp->next;
  head->next = temp->next;
  temp->next  = head;
  head->prev = temp;
}

これが正しいのか、今何をすべきなのかわからない

4

7 に答える 7

6
struct node {
    int data;
    struct node *next;
};


void insertion(struct node **head) {
    if((*head)== NULL || (*head)->next == NULL) {
       return;
    }
    struct node *t1 = (*head)->next;
    while(t1 != NULL) {
        int sec_data = t1->data;
        int found = 0;
        struct node *t2 = *head;
        while(t2 != t1) {
            if(t2->data > t1->data && found == 0) {
                sec_data = t2->data;
                t2->data = t1->data;
                found = 1;
                t2 = t2->next;
            } else {
                if(found == 1) {
                    int temp = sec_data;
                    sec_data = t2->data;
                    t2->data = temp;
                }
                t2 = t2->next;
            }
       }
       t2->data = sec_data;
       t1 = t1->next;
    }
}
于 2015-06-14T08:23:19.983 に答える
1

これについて考えてみてください。リストが空の場合、temp最初はになりますNULL。そのため、実行すると未定義の動作が発生しますtemp->next = head;

デバッグを試してみてください、それは確かに役立ちます。おそらく、前のノードも保持して後で挿入できるようにするか、2つのノードを先読みすることをお勧めします。

于 2012-11-18T19:39:23.097 に答える