2016-04-07 158 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

什么是您的节点包含(前一个,数据,下一个)或(数据,下一个) –