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

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

链表的冒泡排序(换节点)_第1张图片

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

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 个iname>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;
}
如有更好的方法还请指教,谢谢。

你可能感兴趣的:(链表的冒泡排序(换节点))