用类的对象来排序
问题 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;
}
}
浙公网安备 33010602011771号