基本思想
插入排序的基本思想是:维护一个有序序列,初始时有序序列只有一个元素,每次将一个新的元素插入到有序序列中,将有序序列的长度增加 1,直到全部元素都加入到有序序列中。
对上述链表:
p:工作指针,用于遍历无序表。
r:p的后继,用于防止断链后丢失。
q:用于遍历有序表,寻找插入的位置。
操作流程
① 将链表的首元节点(p指向处)与其后继(r指向处)断开(p->next=NULL)
分解处前部为有序表,后部为无序表。
② p进入无序表(p=r)
③ 遍历无序表,逐个取出无序表中的元素,找到其在有序表中的位置
代码实现
//升序排序
struct node *insert_sort(struct node *head)
{
p=head->next;
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=head;
while(q->next!=NULL&&q->next->data<p->data)
{
q=q->next;
}
p->next=q->next;
q->next=p;
p=r;
}
return head;
}