单链表排序(冒泡排序)(C语⾔)优化版:power management是什么意思
void SortList(PSListNode pHead)
{
if (NULL == pHead)
{
硫是常量元素吗return;
}
else
{
int flag = 0;
PSListNode pTailNode = NULL;
/
/当设置的尾节点与头结点指向同⼀个节点时,说明只有⼀个元素为排序,那么冒泡完成
while (pTailNode != pHead)
{
PSListNode pPreNode = pHead;
fieldset怎么设置位置//每次参与⽐较的都是尾节点前⾯的结点
while (pPreNode->pNextNode != pTailNode)
{
PSListNode pCurNode = pPreNode->pNextNode;
if (pPreNode->data > pCurNode->data)
{
DataType dTemp = pPreNode->data;
pPreNode->data = pCurNode->data;
pCurNode->data = dTemp;
flag = 1;
}接口测试工具软件
pPreNode = pPreNode->pNextNode;
}
//对冒泡的优化,只要有⼀趟⽐较没有发⽣结点交换,说明冒泡完成,就可以退出冒泡的代码块了
if (0 == flag)
{
break;
}
pTailNode = pPreNode;
}
}
}
最终优化版:
冒泡排序代码c语言void SortList(PSListNode pHead)
{
if (NULL == pHead)
{
return;
}
else
{
PSListNode pTailNode = NULL;
PSListNode pFlagNode = NULL;
//因为pFlagNode是记录最后⼀次发⽣交换的两个节点的前⼀个结点,理论上如果pFlagNode与pHead相等,
//那么就说明链表只是最开始的两个结点是⽆序的,那么第⼀次排序完成就不再排序,或者是第⼆种情况,pFlagNode //被置为pHead,要是第⼀趟排序完成,pFlagNide仍为pHead,就说明没有发⽣交换,那么就不再进⾏排序
while (pFlagNode != pHead)
{
pTailNode = pFlagNode;
pFlagNode = pHead;
PSListNode pPreNode = pHead;
while (pPreNode->pNextNode != pTailNode)
{
PSListNode pCurNode = pPreNode->pNextNode;
if (pPreNode->data > pCurNode->data)
prototype什么时候用{
DataType dTemp = pPreNode->data;
pPreNode->data = pCurNode->data;
pCurNode->data = dTemp;
//记住最后⼀次发⽣交换的地⽅
pFlagNode = pPreNode->pNextNode;
}
pPreNode = pPreNode->pNextNode;
}
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论