设单链表头结点指针为L,结点数据值为整型,试写出对链表L按“插入方法”排序的算法:LINSORT()L
文字思想:
有序:第一个元素
无序:第二个元素开始的之后的所有元素
将无序部分第一个元素插入到有序部分的合适位置,直到无序部分为空
/**对链表进行直接插入排序
head:链表的头指针
*/
void LINSORT(LinkList head){
//如果为空或者只有一个元素,直接返回
if(head->next==NULL||head->next->next==NULL){
return;
}
//由第二个元素开始
LNode* p=head->next->next;
//分成两个链表,前面的是排序好的,后面的待处理的
head->next->next->next;
//链表不能为空
whlile(p !=NULL){
LNode* q=p->next;
LNode* s=head;
//寻找插入的位置
while(s->next !=NULL && s->next->data < p->data){
s=s->next;
}
//将元素插入
p->next=s->next;
s->next=p;
//继续插入下一个结点
p=q;
}
}