• 用模板写冒泡排序-链表


        大家好,今天继续模板实战编程,我们今天的目标是用模板写一个针对链表的冒泡排序算法,具体如例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 运行效果

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


  • 相关阅读:
    c# webapi 在swagger里添加全局过滤器
    axios get,post请求时带headers
    svn"重新定位"提示版本库uuid不匹配
    DevExpress XtraReport
    DevExpress GridControl List绑定方式下新增行的方法
    对Dev的GridControl/GridView控件进行分组并展开操作
    DevExpress GridControl控件行内新增、编辑、删除添加选择框
    JavaScript 中的FileReader对象(实现上传图片预览)
    数据库连接情况查询
    C#代码中实现两个表(DataTable)的关联查询(JOIN)
  • 原文地址:https://www.cnblogs.com/new0801/p/6176952.html
Copyright © 2020-2023  润新知