其他分享
首页 > 其他分享> > 链表简单选择排序

链表简单选择排序

作者:互联网

链表如何交换两个元素
链表如何唯一标识两个元素
数组值是用下标不同来标识,且之前的条件是<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