用模板写快速排序-链表
来源:互联网 发布:怎样开好淘宝店 编辑:程序博客网 时间:2024/06/01 15:30
上次,我们一起用模板写了数组的快速排序,今天,我们再看看如何用模板写链表的快速排序,具体如例1所示。
例1 快速排序-链表
ListQuickSort.hpp内容:
#ifndef _LIST_QUICK_SORT_H_#define _LIST_QUICK_SORT_H_template<typename T>struct Node{T m_Data;Node * m_pNext;};template<typename T>void ListQuickSort(Node<T> * pHead, Node<T> * pEnd/*尾结点可以为空*/){T Key;T Tmp;Node<T> * pLow = NULL;Node<T> * pHigh = NULL;if (!pHead)return ;if (pHead == pEnd)return;pLow = pHead;pHigh = pHead->m_pNext;Key = pHead->m_Data;while (pHigh != pEnd){if (pHigh->m_Data < Key){pLow = pLow->m_pNext;Tmp = pLow->m_Data;pLow->m_Data = pHigh->m_Data;pHigh->m_Data = Tmp;}pHigh = pHigh->m_pNext;}Tmp = pHead->m_Data;pHead->m_Data = pLow->m_Data;pLow->m_Data = Tmp;ListQuickSort(pHead, pLow);ListQuickSort(pLow->m_pNext, pEnd);}#endifmain.cpp内容:
#define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #include "ListQuickSort.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;ListQuickSort<int>(pInt, NULL);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
- 用模板写快速排序-链表
- 用模板写快速排序-数组
- 用模板写插入排序-链表
- 用模板写冒泡排序-链表
- 用模板写选择排序-链表
- 【排序】快速排序模板
- 【排序】快速排序模板
- 用模板写插入排序-数组
- 用模板写冒泡排序-数组
- 用模板写选择排序-数组
- 快速排序模板
- 快速排序模板
- C++快速排序模板
- C++快速排序模板
- 快速排序(模板)
- 快速排序【模板】
- 快速排序模板
- 快速排序----模板实现
- 程序中克劳斯反响炉以及下流技艺的任何点都支撑多股进料
- 也谈下测试的招人难
- Leetcode--permutations II
- Android系统密度的修改
- 对指针占用字节大小的理解
- 用模板写快速排序-链表
- ios设置启动画面横屏与在故事板中设置控制器界面横屏
- Win7下的JDK环境变量配置(来自百度经验)
- leetcode: Valid Palindrome
- chroot 与 jail
- 监控linux性能的18个命令
- 2.x的extensions/spine/Json.cpp的parse_number有溢出bug
- [leetcode] Gas Station java
- jquery判断checkbox是否被选中