//冒泡排序(有头结点)
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;//新的末尾
}
}
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;//新的末尾
}
}