单链表的插入排序(详细图解说明)

来源:互联网 发布:mysql数据库设计教程 编辑:程序博客网 时间:2024/06/05 07:00

题目:实现一个单链表的插入排序



如图所示,解决这个问题的关键
(1)首先必须维护当前节点的前指针,
(2)然后还要维护要插入的位置的前后指针,
(3)每个要插入的节点都要从头开始比较。
算法如下:
void InsertSort(List l)p = l;    //p,q用来维护插入位置的前后指针q = l.next;r = q;    //r,s用来维护当前带插入的前后指针s = r.next;while(s){while( !q.equals(s)&& s.data > q.data)  //如果q != s, p,q下移{p = p.next;q = q.next;}if(q.equals(s))   //当跳出的循环条件是q == s时,说明s比前面的都大,不用插入{p = l;q = l.next;r = r.next;s = s.next;}else            //当跳出的条件是s.data > q.data时,{//这是交换节点r.next = s.next;s.next = q;p.next = s;//让s指向它原先的下一个,继续进行这个过程s = r.next;//让p,q回到起始位置,以便下一个插入时从头进行比较p = l;q = l.next;}}


原创粉丝点击