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

来源:互联网 发布:淘宝客服怎么设置多个 编辑:程序博客网 时间:2024/06/04 01:14
//冒泡排序(有头结点)
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;//新的末尾
}
}
原创粉丝点击