链表的冒泡排序(换节点)

为了高效性,我选择了换节点的方式来实现链表的排序的核心部分。


这是具体的思路,非常抱歉,图是随便弄的。

ort(struct node *head)//链表排序,冒泡排序
{
	struct node *p, *q,*x,*temp=NULL,*prep,*tail,*subHead,*b,*v=NULL,*t;//定义指针
	prep = head;//指针指向开头
	b = head;
	p = prep;
	q = prep->next;
	for(int i=0;i<4;i++)//有几个数据就-1;比如x 个i<x-1
	{ 
	while(q!=NULL)
	{ 
	if(p->name>q->name)
	{
		if (p ==b)//处理开头的问题
		{
			p->next = q->next;//从后往前连接
			q->next = p;
			head = q;
			prep = head;
			p = head;
			b= head;
			q = head->next;
			
		}
		else if (p != b)//处理中间过程
		{
			p->next = q->next;
			q->next = p;
			head->next = q;
			head = head->next;
			p = head;
			q = head->next;
		}		
	}
	p = p->next;//地址移动
	q = q->next;
	}
	head = prep;
	p = prep;
	q = prep->next;
	}
	head = prep;
	return head;
}
如有更好的方法还请指教,谢谢。

猜你喜欢

转载自blog.csdn.net/yyk219/article/details/80084658