单链表中的冒泡排序(有头节点)

//冒泡排序(有头结点)
template<typename T>
void chainWithHeader<T>::bubblingSort()
{
   chainNode<T>*pr, *pt,*pb,*pf,*pd;//pd表示每次要比较的尾元素,pr表示比较元素的前一个,pt表示比较元素的后一个
   pb = headerNode;            //pb为第一个比较元素的前驱
   pr = headerNode->next;
   pd = NULL;
pf = headerNode;            //pf就是为了得到每次排完序的头节点
bool swapped = true;        //为了在已经有序的情况下能及时退出
while (pf->next!=pd&&swapped)
{
pb = pf;                //pb为第一个比较元素的前驱
pr = pf->next;
swapped = false;        //目前为止未交换
while (pr->next!=pd)
{
                pt = pr->next;
if (pr->element > pt->element)//如果两相邻的节点无序,则交换
{
pb->next = pt;
pr->next = pt->next;
pt->next = pr;
swapped = true;
}
pb = pb->next;
pr = pb->next;
}
pd = pr;//新的末尾
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值