用模板写选择排序-链表

来源:互联网 发布:macbookpro必装软件 编辑:程序博客网 时间:2024/04/30 09:29

    今天,我们一起用模板来写一个选择排序,熟练对模板的使用,具体如例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 << '\t';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 << '\t';pCurNode = pCurNode->m_pNext;}cout << endl;while (pInt){pCurNode = pInt;pInt = pInt->m_pNext;delete pCurNode;}pInt = NULL;_CrtDumpMemoryLeaks();system("pause");return;}
运行效果如图1所示:

图1 运行效果

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

0 0