单链表的直接插入排序(详细步骤)
代码如下:
void Linsersort(linklist L){
linklist p,q,r,u;
p=L->next;//将p指向待排序的第一个结点
L->next=NULL;//将链表的指针域变为空
while(p)//若原表后面还有节点,也就是P不为空成立的话执行下面的循环
{r=L; q=L->next;//r指向链表L,q指向L表的下一个元素,r为q的前驱指针
while(q&&q->data<=p->data)//寻找p结点应该插入的位置,也就是移动
{r=q; q=q->next;}//p一直指向待排一边,q指向排好的一边
u=p->next;//指针u指向为排的一侧
p->next=q;//将p结点为q的前驱插入
r->next=p;//将r变为p的前驱
p=u;//将p指向待排的第一个结点,u作为中间变量
}
}
图示过程:
参考书————数据结构,算法与应用(齐悦,夏克俭,,)