Cod sursa(job #2731969)

Utilizator cosmin1812Nedelcu Adrian Cosmin cosmin1812 Data 28 martie 2021 16:22:16
Problema Deque Scor 0
Compilator c-32 Status done
Runda Arhiva educationala Marime 4.09 kb
#include <iostream>
#include<fstream>
#include<string.h>
#include<ctime>
using namespace std;

ifstream f("date.in");
int v[100], n, t;

void RandomVector()
{
    int maxi,i;
    //cout<<" numar teste : "; cin>>t;
    //cout<<endl;
    cout<<" lungime vector : "; f>>n; cout <<n;
    cout<<endl;
    cout<<" valoare maxima : "; f>>maxi;cout<< maxi;
    cout<<endl;

    for (i = 1; i<= n; i++)
        v[i] = rand()% maxi;
}

/*void citire_vector(int v[], int &n)
{
    int i;
    f>>n;
        f>>v[i];
}*/

void AfisareVector(int v[], int n)
{
    int i;
    for(i=1; i<=n;i++)
        cout<<v[i]<<" ";
    cout<<endl;
}

void BubbleSort (int v[],int n)
{
    int i, sortat = 0, aux;
    while(sortat == 0)
    {
        sortat = 1;
        for (i = 1;i < n ;i++)
            if(v[i] > v[i+1])
            {
                aux = v[i];
                v[i] = v[i+1];
                v[i+1] = aux;
                sortat = 0;
            }
    }
}

void CountSort (int v[], int n)
{
    int maxi, i;
    maxi = 0;

    for (i = 1; i<=n; i++)
        if(v[i] > maxi)
        maxi = v[i];

    int ap[maxi + 1] = {0};

    for(i=1; i<=n ;i++)
        ap[v[i]] ++;

    for(i=0; i <= maxi; i++)
        while(ap[i]--)
            cout<<i<<" ";
    cout<<endl;


    //for(i =1;i<=n;i++)
      //  v[i] = afisare[i];
}

void Sortare (int x[20],int st, int dr)
{
    int aux;
    if (x[st] > x[dr])
    {
        aux = x[st];
        x[st] = x[dr];
        x[dr] = aux;
    }
}
void Merge(int v[], int st, int mij, int dr)
{
    int a[dr - st +1];
    int i = st, j = mij + 1, k = 1;

    while(i <= mij && j <= dr)
        if (v[i] <= v[j])
        {
            a[k] = v[i] ;i++;k++;
        }
        else
        {
            a[k] = v[j];j++;k++;
        }

    if(i <= mij)
        for(j=i; j <= mij; j++)
        {
            a[k] = v[j]; k++;
        }
    else
        for(i=j; i<= dr; i++)
        {
            a[k] = v[i];k++;
        }

    k = 1;

    for(i = st; i<=dr;i++)
    {
        v[i] = a[k];k++;
    }
}


void MergeSort(int v[], int st, int dr)
{
    int mij;
    if((dr-st) <= 1)
        Sortare(v,st,dr);
    else
    {
        mij = (st+dr)/2;
        MergeSort(v,st,mij);
        MergeSort(v,mij+1,dr);
        Merge(v,st,mij,dr);
    }
}

int QuickSort (int v[], int st, int dr)
{
    if (st < dr)
    {
        int mij = (st + dr) /2;
        int aux = v[st];
        v[st] = v[mij];
        v[mij] = aux;

        int i = st, j = dr, d = 0;

        while(i < j)
        {
            if (v[i] > v[j])
            {
                aux = v[i];
                v[i] = v[j];
                v[j] = aux;
                d = 1 - d;
            }
            i += d;
            j -= 1 - d;
        }
        QuickSort(v, st, i -1);
        QuickSort(v, i+1, dr);
    }
}

int Maxim (int v[], int n)
{
    int maxim = v[0],i;
    for(i=1;i<=n;i++)
        if(v[i] > maxim)
        maxim = v[i];
    return maxim;
}

void Count(int v[], int n, int e)
{
    int o[n], i, c[10] = {0};

    for(i=1;i<=n;i++)
        c[(v[i] / e) % 10] ++;

    for(i = 1; i< 10; i++)
        c[i] += c[i - 1];

    for(i = n; i >= 0; i--)
    {
        o[c[(v[i] / e) % 10]] = v[i];
        c[(v[i] / e) % 10]--;
    }

    for(i = 1; i <= n; i++)
        v[i] = o[i];
}

void RadixSort (int v[], int n)
{
    int e;
    int maxi = Maxim(v,n);
    for(e=1; maxi / e > 0; e *= 10)
        Count(v,n,e);
}


int main()
{
    int i,t;
    clock_t start, stop;
    cout<<" numar teste : "; f>>t;
    cout<<endl;
    for(i =1; i <= t;i++)
    {
        RandomVector();
        AfisareVector(v,n);
        cout<<endl;
        start = clock();
        //BubbleSort(v,n);
        //CountSort(v,n);
        //RadixSort(v,n);
        //MergeSort(v,1,n);
        QuickSort(v,1,n);
        stop = clock();
        AfisareVector(v,n);
        cout<<endl;
        cout<<" timpul de exectutie : "<<double(stop - start)/CLOCKS_PER_SEC;
        cout<<endl;
}
    return 0;
}