用类的对象来排序
问题 E: 1,2,3班_Contest1_Q5
时间限制: 1 Sec 内存限制: 128 MB 提交: 320 解决: 166 [提交][状态][讨论版]题目描述
定义抽象排序模板类Tsortin,该类有一个纯虚函数sortmtd;定义排序模板类Tmysort,该类继承自类Tsortin并实现纯虚函数sortmtd,使用任意一种排序算法实现纯虚函数sortmtd。
在main函数中,使用排序模板类Tmysort对象,对整型数组进行从小到大的排序。
输入
输入为若干组数据,每组数据用2行表示,第1行为一个整数n,表示接下来输入的是一个具有n个整数的数列,第2行为n个整数。n大于0小于5000。数列中的整数的绝对值均小于10000。
输出
输出为若干组数据,每组数据用1行表示,为从小到大排序的n个整数。
样例输入
3 3 2 1 5 2 3 1 6 5
样例输出
1 2 3 1 2 3 5 6
提示
#include<iostream> using namespace std; template<class T> class Tmysort{ T*arrayd; int num; public: Tmysort(int n,T *th); ~Tmysort(){delete arrayd;} void sortmtd(); void quicksort(int,int); void insert(int,int); void show(); }; template<class T> Tmysort<T>::Tmysort(int n, T *th){ num =n; arrayd=new T[n]; for(int i=0;i<n;i++) arrayd[i]=th[i]; } template<class T> void Tmysort<T>::insert(int left,int right) { int i,j,min,num; for(i=left;i<=right-1;i++) { min=i; for(j=i+1;j<=right;j++) if(arrayd[min]>arrayd[j])min=j; num=arrayd[min];arrayd[min]=arrayd[i];arrayd[i]=num; } } template<class T> void Tmysort<T>::quicksort(int left,int right) { if(left>right-10) insert(left,right); else{ int l=left,r=right,num; int pivot=(left+right)/2; num=arrayd[pivot];arrayd[pivot]=arrayd[r];arrayd[r]=num; pivot = r ; while(l<r){ while(arrayd[l]<arrayd[pivot]) l++; while(arrayd[r]>=arrayd[pivot]) r--; num=arrayd[l];arrayd[l]=arrayd[r];arrayd[r]=num; } num=arrayd[l];arrayd[l]=arrayd[r];arrayd[r]=num; num=arrayd[l];arrayd[l]=arrayd[pivot];arrayd[pivot]=num; quicksort(left,l-1); quicksort(l+1,right); } } template<class T> void Tmysort<T>::sortmtd(){ quicksort(0,num-1); } template<class T> void Tmysort<T>::show(){ for(int i=0;i<num-1;i++) cout<<arrayd[i]<<" "; cout<<arrayd[num-1]<<endl; } int main() { int num; while(cin>>num){ int*it = new int[num]; for(int i=0;i<num;i++) cin>>it[i]; Tmysort<int>sortme(num,it); sortme.sortmtd(); sortme.show(); delete it; } }