/* 插入排序法 */
void sort(Linklist *&L)
{
LinkList *p=L->next, *q, *r;
if(p!=NULL)
{
/* 把链表分成两条,一条已经排序好了(L),一条待排序(p)*/
r=p->next;
p->next=NULL;
p=r;
/* 对于所有待排序的元素 */
while(p!=NULL)
{
/*把p链表的第一个元素插入到L,并且将它从p中移除*/
r=p->next; //r指向p的第二个元素
/* 找到合适的插入点 */
q=L;
while(q->next!=NULL && q->next->data < p->data)
q=q->next;
/* 在q后面插入p */
p->next=q->next;
q->next=p;
/* 现在p的第一个元素已经被移到L中合适的位置了 */
p=r;
}
}
}
没有问题,
while(q->next!=NULL&&q->next->data
q=q->next;
是一个循环,一直跑到有序数组的最后,这个算法很抽象,我看了很久才懂。
建议换本书,这书上的代码写的叫个啥玩意儿啊,什么p,q,r,L的,名字都不会起,一看就不是什么好书。
void Insert(L, node){
var vNodeNext
for vCurNode in L{
if(vCurNode.Value >= node.Value){ //升序
//if(vCurNode.Value >= node.Value){ //降序
vNodeNext = vCurNode.Next
vCurNode.Next = Node
Node.Next = vNodeNext
exit
}
}
}
每次插入元素都通过这个insert插入