I'm trying to learn algorithm and get better with C++. So instead of using all the sorting procedure comes with STL, I have learn to write a few sorting codes. Now I want to merge them together. I'm working on two right now, merging the heap sort and quick sort together.

Code:template <class Type> class Heap { private: Type *A; int heap_size; int heap_length; public: //Heap(); Heap(Type * array, int length); ~Heap(); int parent(int i) { return i/2;}; int left (int j) { return 2*j+1;}; int right (int k) { return 2*k+2;}; void exch(double *x, double *y); void show(); void max_heapify(int i); void build_max_heap(); void sort(); Type heap_max() {return A[0];}; double heap_extract_max(); }; #endifSince these two classes are very similar, I want to merge them together. Should I used the abstract based class and alter these two classes since they both require to store the array "A" and its length. Also they share some functions.Code:template<class Type> class Qsort { private: Type *A; int length; public: Qsort(); Qsort( int n, Type * Arr); ~Qsort(); // Quick sort void sort(int p , int r); int partition( int p, int r); // Randomized quick sort void random_sort(int p, int r); int random_partition(int p, int r); void show(); void exch(Type * a, Type * b); };

So I have this abstract base class:

I include show() in the ABC because both derived classes will have the same function for show(). Should I include the "exch()" function as well since its present in other two classes?Code:template <class Type> class SortABC { private: Type *A; int length; public: Sort(); virtual ~Sort() = 0; virtual void show() = 0; }

This means I need another class that inherits from both heap-sort and quick-sort classes. Is this the situation that container would not work and I have to use multiple inheritance? So if I have like 5 or 6 different sorting algorithms, I need to inherit all of them?