简单选择排序-链表


基本思路:参照直接插入排序(链表),将待排链表分成两部分:已排和待排

 

 1 void SelectionSort_LinkList(LinkList &L)
 2 {
 3     LNode *r = L->next;//r 指向待排序序列
 4     LNode *p = L;//p 指向已排序列
 5     LNode *q,*pre,*s;
 6     p->next = nullptr;//将列表分成两部分:已排与待排
 7     while(r) {
 8         q = r;//q 指向待排序列中最小的结点
 9         s = r;//s 
10         pre = r;//pre 指向 q 的前一个结点
11         while(s->next) {//查找 r 中最小的结点
12             if (s->next->key < q->key) {
13                 pre = s;
14                 q = s->next;
15             }
16             s = s->next;
17         }
18         if (q != r) {
19             pre->next = q->next;
20         } else {
21             r = r->next;//如果就是当前结点,则r 直接指向下一个
22         }
23         p->next = q;
24         p = p->next;
25         p->next = nullptr;
26     }
27 }