• 用模板写选择排序-链表


        今天,我们一起用模板来写一个选择排序,熟练对模板的使用,具体如例1所示。

    例1 选择排序-链表

    ListSelectSort.hpp内容:

    #ifndef _LIST_SELECT_SORT_H_
    #define _LIST_SELECT_SORT_H_
    template<typename T>
    struct Node
    {
    	T m_Data;
    	Node * m_pNext;
    };
    template<typename T>
    bool SelectSort(Node<T> * & pHead)
    {
    	Node<T> * pCurNode = NULL;
    	Node<T> * pTemp = NULL;
    	T tTemp;
    	Node<T> * pMin = NULL;
    	if (!pHead)
    		return false;
    	pCurNode = pHead;
    	while (pCurNode)
    	{
    		pTemp = pCurNode->m_pNext;
    		pMin = pCurNode;
    		while (pTemp)
    		{
    			if (pTemp->m_Data < pMin->m_Data)
    			{
    				pMin = pTemp;
    			}
    			pTemp = pTemp->m_pNext;
    		}
    		if (pMin != pCurNode)
    		{
    			tTemp = pCurNode->m_Data;
    			pCurNode->m_Data = pMin->m_Data;
    			pMin->m_Data = tTemp;
    		}
    		pCurNode = pCurNode->m_pNext;
    	}
    	return true;
    }
    #endif
    main.cpp内容:

    #define CRTDBG_MAP_ALLOC  
    #include <stdlib.h>  
    #include <crtdbg.h>  
    #include "ListSelectSort.hpp"
    #include <time.h>
    #include <iostream>
    using namespace std;
    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 (SelectSort<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 运行效果

        今天,我们一起实践了选择排序,希望能加深大家对模板的体会。

  • 相关阅读:
    图片上传前预览、压缩、转blob、转formData等操作
    Vue背景图打包之后访问路径错误
    图片上传前预览的功能
    总结div里面水平垂直居中的实现方法
    IE浏览器报Promise未定义的错误、解决vuex requires a Promise polyfill in this browser问题
    普通项目转换成maven项目
    HTTP 错误 404.0
    电商项目系列文档(四):售后的设计(退换货)
    Sqlserver数据库还原.bak文件失败的两个问题
    数据库字段顺序的【坑】
  • 原文地址:https://www.cnblogs.com/new0801/p/6176950.html
Copyright © 2020-2023  润新知