2016-04-07 153 views
0

我想按升序對鏈表中的元素進行排序。 我寫了下面的代碼:
鏈接列表中的排序元素

void don(struct node *head) 
{ 
struct node *god,*tmp=head,*current,*bak; 
for(god=head;god->next!=NULL;god=god->next) 
{ 
    current=god->next; 
    for(bak->next=tmp;(bak->next)!=(god->next);bak=bak->next) 
    { 
     if((current->data)<(bak->next->data)) 
     { 
      god->next=current->next; 
      current->next=god; 
      bak->next=current; 
     } 
    } 
} 
} 

但其產生到infinte循環。
請幫助糾正代碼:)!
我想要它做它用這種方式

5-2-3-1-4 
2-5-3-1-4 
2-3-5-1-4 
1-2-3-5-4 
1-2-3-4-5 
+0

這種看起來像冒泡排序,但你能澄清你想使用哪種算法? –

+0

@timBiegeleisen它的插入排序 –

+0

'for(bak-> next = tmp;' - 並且您設置了'bak' *其中*正確嗎?您的代碼正在解引用不確定的指針並調用*未定義的行爲*。我停止閱讀,所以肯定會有更多 – WhozCraig

回答

0

本聲明

god->next=current->next; 

減免()循環的第一

for(god=head;god->next!=NULL;god=god->next) 
+0

請解釋,不能理解 –

+0

循環期望它總是前進不幸的是,它可能會通過改變內部循環內的god-> next返回 – GMichael

0

試試這個

void don(struct node *head) 
{ 
struct node *god,*tmp=head,*current,*bak; 
int data; 
for(god=head;god->next!='\0';god=god->next) 
{ 
    current=god->next; 
    for(current;current->next!='\0';current=current->next) 
    { 
     if((current->data)<(god->data)) 
     { 
      data=current->data; 
      current->data=god->data; 
      god->data=data; 
     } 
    } 
} 

}

+0

如何使用插入排序? –

+0

我會檢查並通知您 –

+0

什麼是您的節點包含(前一個,數據,下一個)或(數據,下一個) –