用类的对象来排序

问题 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;
}
}

  

 

posted on 2013-04-23 23:56  Besion王  阅读(247)  评论(0编辑  收藏  举报

导航