直接插入排序的思想,就是先默认第一个元素是排序好的,在顺序表中,从后面往前依次进行比较,从而进行排序。但是在单链表中,从后面遍历的话,找结点的前驱非常困难。故需要设一指针,从头进行遍历。
代码如下:
void Sort(LinkNode *&L)
{
LinkNode *p,*pre,*q;
p=L->next->next; ///p指向L的第二个数据元素
l->next->next=NULL; ///构造只含有一个数据元素的有序单链表
while(p!=NULL){
q=p->next; ///q保存p结点的后继结点指针
pre=L; ///每次从有序单链表开始进行比较,pre指向插入结点的前驱结点
while(pre->next!=NULL&&pre->next->data<p-data){
pre=pre->data;
}
p->next=pre->next; ///在pre所指结点之后插入p所指结点
pre->next=p;
p=q; ///扫描原单链表余下的结点,指向下一个结点
}
}