链表实现直接选择排序
思路
- 先将头结点与后续节点断开,用位置指针指向后续第一个节点。
- 此时后续节点为未排序序列,每轮循环从未排序链表中找到最大节点,然后用头插法插入L指向的链表,直到未排序链表为空
- 则L指向的链表中是从小到大顺序排好的链表
代码
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
void select_sort(LinkList &L)
{
LNode *pos,*p,*pre,*max,*premax;
pos=L->next;
L->next=NULL;
while(pos!=NULL)
{
premax=pre=NULL;
p=max=pos;
while(p!=NULL)
{
if(p->data>max->data)
{
max=p;premax=pre;
}
pre=p;
p=p->next;
}
if(premax==NULL){
pos=max->next;
}else{
premax->next=max->next;
}
max->next=L->next;
L->next=max;
}
}