单链表中进行直接插入排序(有头节点)

//插入排序
template
void chainWithHeader::insertsort()
{
//将链表分成两段,一段有1个元素,另一段有n-1个元素,这是基础
chainNode*p= headerNode->next->next;     //p代表第二个节点,此表从第二个节点开始
headerNode->next->next = NULL;              //只要一个元素的表,等待插入          
chainNode*r,*q;
while (p!= NULL)
{
r = p->next;                           //保存p后面还没比较的节点
q = headerNode;                        //新表的表头,每次从表头开始找
while (q->next != NULL&&q->next->element <= p->element)  //找到大于p的那个节点前驱
q = q->next;
p->next = q->next;                                 //p->next指向q->next的值
q->next = p;               //q->next指向p处的值,相当于从p指的链表找到一个元素放入headerNode所指链表的合适位置
p = r;                                             //进行下一次比较
}
}

你可能感兴趣的:(数据结构)