========================== 功能:选择排序(由小到大) 返回:指向链表表头的指针 ========================== */ /* 选择排序的基本思想就是反复从还未排好序的那些节点中, 选出键值(就是用它排序的字段,我们取学号num 为键值)最小的节点, 依次重新组合成一个链表
我认为写链表这类程序,关键是理解: head 存储的是第一个节点的地址,head->next 存储的是第二个节点的地址; 任意一个节点p 的地址,只能通过它前一个节点的next 来求得
单向链表的选择排序图示: ---->[1]---->[3]---->[2]
---->[n]---->[NULL](原链表) head 1->next 3->next 2->next n->next ---->[NULL](空链表) first tail ---->[1]---->[2]---->[3]
---->[n]---->[NULL](排序后链表) first 1->next 2->next 3->next tail->next 图10:有N 个节点的链表选择排序 1、先在原链表中找最小的,找到一个后就把它放到另一个空的链表中; 2、空链表中安放第一个进来的节点,产生一个有序链表,并且让它在原链表中分离出来(此时要注意原链表中出来的是第一个节点还是中间其它节点); 3、继续在原链表中找下一个最小的,找到后把它放入有序链表的尾指针的next,然后它变成其尾指针; */ struct student *SelectSort(struct student *head) { struct student *first; /*排列后有序链的表头指针*/ struct student *tail; /*排列后有序链的表尾指针*/ struct student *p_m