单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了
// 单链表通过移动 节点 实现数据的升序排序 大家给指出哪里错了,怎么改进下.. 假设数据类型为整型。void sort(Linklist head)
{
ListLnode *p,*rear,*r,*k;
int min;
rear=head;
p=head; // 想法这样的 始终 保持 r 为 p 的前驱
r=p;
k=head->next; // k 指向第一个节点
while(k)
{
min=k->data;
for(r=p,p=p->next;(r&&p);r=p,p=p->next)
{
if(min>p->data)
min=p->data;
}
if(min==k->data) //j假如第一个节点经过遍历是最小的
{
p=k;
r=p;
k=k->next; // k向后移动 r和p 始终保持前驱和后继的关系
}
else
{
r->next=p->next; // 取出最小的节点
p->next=rear->next; // 插入到第一个节点的前面
rear->next=p;
rear=p; // 这一步想着 rear 能够指向当前的最小值节点
r=p;
k=p->next; // k 继续向后移动 实现下一步遍历
}
}
}