算法描述:
定义指针p和q,p用来遍历指针,q为联动指针。 定义pmax和qmax。pmax指向当前链表中值最大的结点,qmax指向值最大结点的前驱结点
用指针p遍历链表head找出当前链表中的值最大的结点,用pmax指向该结点。然后利用qmax将该最大值结点从链表head中删除,利用头插法插入链表head1中。 重复操作即可
代码如下:
结构体定义:
typedef struct node{
int data;
struct node *next;
}ElemSN;
//选择排序法对单向链表进行升序排序
ElemSN* SelectSort(ElemSN *head){
ElemSN *head1,*p,*q,*pmax,*qmax;
head1=NULL;
while(head){
for(q=pmax=head,p=head->next;p;q=p,p=p->next){ //用p指针遍历链表,找出当前链表最大值给pmax,qmax为前驱指针
if(p->data>pmax->data){
pmax=p;
qmax=q;
}
}
if(pmax-head){
qmax->next=pmax->next;
}else{
head=head->next;
}
pmax->next=head1; //将找出的最大值结点头插到链表head1中
head1=pmax;
}
return head1;
}