链表的冒泡排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/moses1213/article/details/52098502

由于链表的特殊性,只存在后向指针,所有的数只能向后移动,所以采用冒泡排序时先把最大的数交换到最后,然后第二大的数交换到倒数第二个结点上,注意每次交换的边界的更新。

void ListSort(ListNode* pHead)
{
	if(pHead == NULL)
		return;
 
	ListNode *pEnd, *pNode;
	pEnd = NULL;
 
	while(pEnd != pHead)
	{
		for(pNode = pHead; pNode->m_pNext != pEnd; pNode = pNode->m_pNext)
		{
			if(pNode->m_nValue > (pNode->m_pNext->m_nValue))
			{
				int tmp = pNode->m_nValue;
				pNode->m_nValue = pNode->m_pNext->m_nValue;
				pNode->m_pNext->m_nValue = tmp;
			}
		}
		pEnd = pNode;
	}
}




猜你喜欢

转载自blog.csdn.net/moses1213/article/details/52098502