zoukankan      html  css  js  c++  java
  • 用模板写冒泡排序-链表

        大家好,今天继续模板实战编程,我们今天的目标是用模板写一个针对链表的冒泡排序算法,具体如例1所示。

    例1 冒泡排序-链表

    ListBubbleSort.hpp的内容:

    #ifndef _LIST_BUBBLE_SORT_H_
    #define _LIST_BUBBLE_SORT_H_
    #include <iostream>
    using namespace std;
    template<typename T>
    struct Node
    {
        T m_Data;
        Node * m_pNext;
    };
    template<typename T>
    bool BubbleSort(Node<T> * & pHead)
    {
        Node<T> * pCurNode = NULL;
        Node<T> * pTemp = NULL;
        Node<T> * pNext = NULL;
        T tTemp;
        bool bChange = false;
        if (!pHead)
            return false;
        pCurNode = pHead;
        while (pCurNode)
        {
            pTemp = pHead;
            pNext = pTemp->m_pNext;
            bChange = false;
            while (pTemp && pNext)
            {
                if (pTemp->m_Data > pNext->m_Data)
                {
                    tTemp = pTemp->m_Data;
                    pTemp->m_Data = pNext->m_Data;
                    pNext->m_Data = tTemp;
                    bChange = true;
                }
                pTemp = pTemp->m_pNext;
                pNext = pTemp->m_pNext;
            }
            if (!bChange)
                break;
            pCurNode = pCurNode->m_pNext;
        }
        return true;
    }
    #endif
    main.cpp的内容:

    #include "ListBubbleSort.hpp"
    #include <time.h>
    
    void main()
    {
    	int i = 0;
    	Node<int> * pInt = NULL;
    	Node<int> * pNewNode = NULL;
    	Node<int> * pCurNode = NULL;
    	srand(time(NULL));
    	for (i = 0; i < 10; i++)
    	{
    		pNewNode = new Node<int>;
    		if (pNewNode == NULL)
    		{
    			while (pInt)
    			{
    				pCurNode = pInt;
    				pInt = pInt->m_pNext;
    				delete pCurNode;
    			}
    			pInt = NULL;
    			return;
    		}
    		pNewNode->m_Data = rand() % 100;
    		pNewNode->m_pNext = pInt;
    		pInt = pNewNode;
    	}
    	cout << "排序前:" << endl;
    	pCurNode = pInt;
    	while (pCurNode)
    	{
    		cout << pCurNode->m_Data << '	';
    		pCurNode = pCurNode->m_pNext;
    	}
    	cout << endl;
    	if (BubbleSort<int>(pInt) == false)
    	{
    		cout << "排序失败." << endl;
    	}
    	else
    	{
    		cout << "排序成功." << endl;
    	}
    
    	cout << "排序后:" << endl;
    	pCurNode = pInt;
    	while (pCurNode)
    	{
    		cout << pCurNode->m_Data << '	';
    		pCurNode = pCurNode->m_pNext;
    	}
    	cout << endl;
    	while (pInt)
    	{
    		pCurNode = pInt;
    		pInt = pInt->m_pNext;
    		delete pCurNode;
    	}
    	pInt = NULL;
    	_CrtDumpMemoryLeaks();
    	system("pause");
    	return;
    }
    运行效果如图1所示:

    图1 运行效果

        今天,我们一起实现了链表的冒泡排序,希望大家回去再实践一下,加深体会。


  • 相关阅读:
    android开发学习4
    macOS login: Could not determine audit condition 问题解决
    java代码编程规范
    学习进度报告(二)
    学习进度报告(一)
    android开发笔记
    数组
    软件工程第二周开课博客
    第一周学习总结
    用户体验评价
  • 原文地址:https://www.cnblogs.com/new0801/p/6176952.html
Copyright © 2011-2022 走看看