Cod sursa(job #1711070)

Utilizator com2014com2014 com2014 Data 30 mai 2016 13:31:31
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 2.57 kb
#include<stdio.h>
#include <iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
 
template<class T>
class vectorA{

int zonaAloc;
int zonaOc;
T* vec;
void vecResize();

public:
vectorA( int );
void push( T );
void showVec();
int length();
void pop( int );
void pop_end();
void sortare();
T& operator[]( int );

};

template<class T>
T& vectorA<T>::operator[](int a){
        return vec[a];
}

template<class T>
void vectorA<T>::sortare(){
    int t=1;
    while(t==1)
        {t=0;
        for(int i=0;i<zonaOc-1;i++)
            if( vec[i]>vec[i+1] )
            {t=1;
             T aux = vec[i]; vec[i] = vec[i+1]; vec[i+1] = aux;
             }
        }
}


template<>
void vectorA<char>::sortare(){
    int t=1;
    while(t==1)
        {t=0;
        for(int i=0;i<zonaOc-1;i++)
            if( int(vec[i]) > int (vec[i+1])  )
            {t=1;
             char aux = vec[i]; vec[i] = vec[i+1]; vec[i+1] = aux;
             }
        }
}

template<>
void vectorA<string>::sortare(){
    int t=1;
    while(t==1)
        {t=0;
        for(int i=0;i<zonaOc-1;i++)
            if( strcmp( vec[i].c_str(), vec[i+1].c_str() )  > 0 )
            {t=1;
             string aux = vec[i]; vec[i] = vec[i+1]; vec[i+1] = aux;
             }
        }
}



template<class T>
void vectorA<T>::pop_end(){
if( zonaOc > 0 )
    zonaOc--;
}

template<class T>
void vectorA<T>::pop(int a){
    if(a<zonaOc)
    {for(int i=a ;i<zonaOc; i++)
        if( i!= zonaOc-1)
            vec[i]=vec[i+1];
    zonaOc--;
    }
}

template<class T>
void vectorA<T>::vecResize(){
    T* newvec;
    newvec = new T[zonaAloc*2];
    for(int i=0;i<zonaAloc;i++)
        newvec[i]=vec[i];
    zonaAloc=zonaAloc*2;
    delete[] vec;
    vec=newvec;
}

template<class T>
int vectorA<T>::length(){
return zonaOc;
}

template<class T>
vectorA<T>::vectorA(int a)
{
    vec=new T[a];
    zonaAloc = a;
    zonaOc = 0;
}

template<class T>
void vectorA<T>::showVec(){
    for(int i=0;i<zonaOc;i++)
        cout<<vec[i]<<"\n";
}

template<class T>
void vectorA<T>::push(T add){
    vec[zonaOc]=add;
    zonaOc++;
    if(zonaAloc==zonaOc)
        this->vecResize();
}

vectorA<int> A (500000);

int n;

void citire(void)
{
    FILE *f = fopen("algsort.in","r");
    int x;
     
    fscanf(f,"%d",&n);
    for(int i=0;i<n;i++) {
        fscanf(f,"%d ",&x);
        A.push (x);
    }
         
    fclose(f);
}
 
void afisare(void)
{
    FILE *f = fopen("algsort.out","w");
     
    for(int i=0;i<n;i++)
        fprintf(f,"%d ",A[i]);
     
    fclose(f);
}
 
int main()
{
    citire();
    A.sortare ();
    afisare();
    return 0;
}