前言:
在此之前,我分别写了堆排、快排、基数排序三篇文章,现在来进行一下总结,大家如果看过这三篇文章,会发现其中很多成员函数一模一样,嘿嘿嘿,说道这里,大家一定有一种能不能进行代码重用呢?答案当然是:可以啦!
所以,我们将上述三个独立的算法整合到一起,命名为Sort类,其中的成员函数和成员变量都没有发生改变,只是进行了3次Ctrl+C和3次Ctrl+V,然后对main()函数进行了改动,然后就没有然后了,大功告成。
![得意](https://static-blog.csdn.net/xheditor/xheditor_emot/default/proud.gif)
完整代码如下:
//#pragma once
#include <iostream>
using namespace std;
const int Cutoff = 28; //阈值,当子序列元素个数小于Cutoff时,采用简单排序(在快排中)
const int RADIX = 10; //进制数
const int MaxDigit = 4; //单个元素所具有的的最大位数
//桶元素节点
struct Node
{
int key; //待排数据
struct Node* next; //指向下一个桶节点的指针
};
//桶头节点
struct HeadNode
{
struct Node *head, *tail;
};
typedef struct HeadNode Bucket[RADIX];
template <class T>
class Sort
{
private:
Bucket B; //桶
T * A; //存放堆元素的数组
int N; //堆中的元素个数
public:
Sort(int InputSize); //构造函数
~Sort() { delete[] A; cout << "析构函数执行成功" << endl; } //析构函数
//堆排序
void HeapSort(); //堆排序
void PercDown(int p, int N); //将N个元素的数组中以A[p]为根的子堆调整为最大堆
//快速排序
void QuickSort(int Left, int Right); //递归进行快排
T Median3(int Left, int Right); //选主原(轴