简单选择排序-链表
基本思路:参照直接插入排序(链表),将待排链表分成两部分:已排和待排
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 }