算法思想: 每次选择最大的或者最小的 进行尾插或者头插。本例选择每次找到最小的数进行尾插
void SelectSort(LNode *&head){
if(head->next==NULL||head->next->next==NULL) //若链表为空或者链表中只有一个元素 返回
return ;
LNode *s=(LinkList)malloc(sizeof(LNode)); //重新分配一个头节点
LNode *cur; //内层循环游标节点
LNode *min; // 存储最小值的节点
LNode *pre; //游标节点的前驱节点
s->next=head>next;
head->next=NULL;
LNode *r=head; //尾节点
while(s->next){ //如果当前“被选择的”链表还存在元素
pre=s; //最小值节点的前驱节点 避免断链
cur=s->next; //游标节点
min=cur; //默认最小值节点为第一个节点
while(cur->next){
if(cur->next->data<min->data){
pre=cur;
min=cur->next;
}
cur=cur->next;
}
pre->next=min->next; //解链
min->next=r->next; //尾插新的最小节点
r->next=min;
r=min;
}
r->next=NULL; //尾节点指空
}