链表简单选择排序
作者:互联网
链表如何交换两个元素
链表如何唯一标识两个元素
数组值是用下标不同来标识,且之前的条件是<min已经筛去了=min的元素。
链表是用值的不同来标识,且也已经筛去了=min的元素
struct typedef node
{
int data;
struct node* next;
}Listnode;
void select_sort(node* head)//选择排序(升序)
{
Listnode* pre = head;
Listnode* p = pre->next;
Listnode* bmin = pre, * min, * lmin;//bmin是min前一个节点,lmin是min后一个节点
Listnode* bq, * q; //bq记录q的前一个节点
while (p->next)//从第一个元素开始遍历到n-1个元素
{
min = p;//从第一个元素开始遍历
lmin = min->next;//min的后一个节点
bq = p;//p的前一个节点
q = p->next;//p从第二个元素开始遍历
while (q)//循环在min后面到第n个元素,找到最小值节点
{
if (q->data < min->data)
{ //记录min及其前后两个节点
bmin = bq;
min = q;
lmin = min->next;
}
bq = q;
q = q->next;//遍历
}
if (p->data != min->data)//在min后找到更小的值就交换
{
pre->next = min;//min插入p位置
min->next = p->next;
p->next = lmin;//p插入min位置
bmin->next = p;
}
pre = pre->next;
p = pre->next;
}
}
标签:pre,min,next,链表,bq,简单,排序,lmin,节点 来源: https://blog.csdn.net/xza13155/article/details/115584166