Cod sursa(job #1711066)

Utilizator com2014com2014 com2014 Data 30 mai 2016 13:12:31
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 3.34 kb
#include<stdio.h>
#include <iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
 
#define SIZE 1000000

template<class Type>
class Vector
{
    Type* ZonaFolosita;
    Type* ZonaAlocata;
    int DimensiuneFolosita;
    int DimensiuneAlocata;
public:
    Vector();
    void insert(Type);
    Type operator[](int );
    void DeleteLast();
    void DeletePoz(int );
    void afisare();
    void sortare();
    void cautare(Type);
    void verificare();
};

template<class Type>
Vector<Type>::Vector()
{
    this->ZonaFolosita=new Type[0];
    this->ZonaAlocata=new Type[SIZE];
    this->DimensiuneFolosita=0;
    this->DimensiuneAlocata=SIZE;
}
template <class Type>
void Vector<Type>::verificare()
{
    if(DimensiuneAlocata==DimensiuneFolosita)
    {
        DimensiuneAlocata=2*DimensiuneAlocata;
        ZonaAlocata=(Type*)realloc(ZonaAlocata,DimensiuneAlocata*sizeof(Type));
    }
}

template<class Type>
void Vector<Type>::insert(Type Object)
{  verificare();
        this->DimensiuneFolosita++;
        this->ZonaFolosita=(Type*) realloc(ZonaFolosita,DimensiuneFolosita*sizeof(Type));
        ZonaFolosita[DimensiuneFolosita-1]=Object;
        memcpy(ZonaAlocata,ZonaFolosita,DimensiuneFolosita*sizeof(Type));
        ZonaAlocata=(Type*)realloc(ZonaAlocata,DimensiuneAlocata*sizeof(Type));

}

template<class Type>

Type Vector<Type>::operator [](int i)
{
    if(i<0||i>DimensiuneFolosita-1)
    {
        cout<<"Nu se poate ";
        exit(0);
    }
    else
        return ZonaFolosita[i];
}
template<class Type>
void Vector<Type>::cautare(Type Object)
{
    int ok=0;
    for(int i=0;i<DimensiuneFolosita;i++)
        if(ZonaFolosita[i]==Object)
        {
            cout<<"S a gasit pe pozitia "<<i;
            ok=1;
        }
    if(ok==0)  cout<<endl<<"Nu s a gasit"<<endl;

}
template<class Type>
void Vector<Type>::sortare()
{
    for(int i=0;i<DimensiuneFolosita-1;i++)
        for(int j=i+1;j<DimensiuneFolosita;j++)
            if(ZonaFolosita[i]>ZonaFolosita[j])
    {
        ZonaFolosita[i]=ZonaFolosita[i]+ZonaFolosita[j]-(ZonaFolosita[j]=ZonaFolosita[i]);
    }
}
template<class Type>
void Vector<Type>::DeleteLast()
{
    DimensiuneFolosita--;
    Type* aux;
    aux=(Type*)malloc(DimensiuneFolosita*sizeof(Type));
    memcpy(aux,ZonaFolosita,DimensiuneFolosita*sizeof(Type));
    delete ZonaFolosita;
    ZonaFolosita=(Type*)malloc(DimensiuneFolosita*sizeof(Type));
    memcpy(ZonaFolosita,aux,DimensiuneFolosita*sizeof(Type));
    memcpy(ZonaAlocata,ZonaFolosita,DimensiuneFolosita*sizeof(Type));
    ZonaAlocata=(Type*)realloc(ZonaAlocata,DimensiuneAlocata*sizeof(Type));
}
template<class Type>
void Vector<Type>::DeletePoz(int pozitie)
{
    for(int i=pozitie;i<DimensiuneFolosita-1;i++)
        ZonaFolosita[i]=ZonaFolosita[i+1];
    DeleteLast();

}
template<class Type>
void Vector<Type>::afisare()
{
    for(int i=0;i<DimensiuneFolosita;i++)
        cout<<ZonaFolosita[i]<<" ";
    cout<<endl;
}

Vector<int> A;
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.insert (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;
}