
简单选择排序(单链表)
思想:将原链表拆出去,定义一个新的头结点,接到原链表头部,将原链表头结点后接NULL,然后从链表中找到一个最大的节点(遍历链表过程中,再定义一个指向最大值结点的指针,一个最大值结点的前驱结点的指针,便于将其拆下来),将其使用头插法插入到原头结点后面。
//头插法
void insert(LNode *head, LNode *q){
if(q==NULL) return;
q->next=head->next;
head->next=q;
}
//找最大结点,拆下来(从待排序序列中)
LNode * chuli=(LNode *)malloc(sizeof(LNode));
chuli->next=head->next;
head->next=NULL;
while(chuli->next!=NULL){
int max=chuli->next->data;
LNode *p=chuli->next;
LNode *pre=chuli;
LNode *p_max=chuli->next;
LNode *pre_max=chuli;
while(p!=NULL){
if(p->data>max){
max=p->data;
p_max=p;
pre_max=pre;
}
p=p->next;
pre=pre->next;
}
pre_max->next=p_max->next;
insert(head,p_max);
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 AuraX
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果