Untitled

 avatar
unknown
c_cpp
2 years ago
4.7 kB
5
Indexable
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <random>

using namespace std;

random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dist(1, 1000000);

long long int read_QPC(){
    LARGE_INTEGER count;
    QueryPerformanceCounter(&count);
    return((long long int)count.QuadPart);
}

void showArray(int *arr, int arrSize){
    cout<<"Aktualna tablica: ";

    int i=0;
    while(i<arrSize){
        cout<<arr[i]<<" ";
        i++;
    }

    cout<<endl<<endl;
}

void pushBackArr(int *arr, int *newArr, int arrSize, int number){
    int i=0;

    while(i<arrSize-1){
        newArr[i]=arr[i];
        i++;
    }

    newArr[arrSize-1] = number;
}

void pushFrontArr(int *arr, int *newArr, int arrSize, int number){
    int i=1;

    arr[0]=number;

    while(i<arrSize){
        arr[i]=newArr[i-1];
        i++;
    }
}

void pushAtIdArr(int *arr, int *newArr, int arrSize, int number, int pos){
    int i=0, j=0;

    while(i<arrSize){
        if(i==pos){
            newArr[pos]=number;
            i++;
            continue;
        }
        newArr[i]=arr[j];
        i++;
        j++;
    }
}

void popBackArr(int *arr1, int *arr2, int arrSize){
    int i=0;

    while(i<arrSize){
        arr1[i] = arr2[i];
        i++;
    }
}

void popFrontArr(int *arr1, int *arr2, int arrSize){
    int i=0;

    while(i<arrSize){
        arr2[i]=arr1[i+1];
        i++;
    }

}

void popAtIdArr(int *arr1, int *arr2, int arrSize, int pos){
    int i=0;

    while(i<arrSize){
        if(i>=pos) arr1[i] = arr2[i+1];
        else arr1[i] = arr2[i];
        i++;
    }
}

void dynamicArray(){    int arrSize = 100000, number;
    long long int frequency, start, elapsed;

    // wpisywanie z pliku liczb tu bedzie

    int *arr = new int[arrSize];
    int i=0;

    while(i<arrSize){
        arr[i] = dist(gen);
        i++;
    }

    //showArray(arr, arrSize);

    // Dodawanie liczby z tylu

    cout<<"Podal liczbe ktora chcesz dodac z tylu: ";
    cin>>number;

    QueryPerformanceFrequency((LARGE_INTEGER *)&frequency);
    start = read_QPC();

    arrSize+=1;
    int *newArr = new int[arrSize];
    pushBackArr(arr, newArr, arrSize, number);
    delete[] arr;

    elapsed = read_QPC() - start;
    cout<< "Czas [us] = " << fixed<<setprecision(0)<< (1000000.0 * elapsed) / frequency <<endl<<endl;

    //showArray(newArr, arrSize);

    // Dodawanie z przodu

    cout<<"Podaj liczbe ktora chcesz dodac z przodu: ";
    cin>>number;

    start = read_QPC();

    arrSize+=1;
    arr = new int[arrSize];
    pushFrontArr(arr, newArr, arrSize, number);
    delete [] newArr;

    elapsed = read_QPC() - start;
    cout<<"Czas [us] = "<<fixed<<setprecision(0)<< (1000000.0 * elapsed) / frequency <<endl<<endl;

    //showArray(arr, arrSize);

    //Dodawanie na wybranej pozyjcji
    int position;
    cout<<"Podaj pozycje na ktora chcesz wsatwic liczbe: ";
    cin>>position;
    cout<<"Podaj liczbe do wstawienia: ";
    cin>>number;

    start = read_QPC();

    arrSize+=1;
    newArr = new int[arrSize];
    pushAtIdArr(arr, newArr, arrSize, number, position);
    delete [] arr;

    elapsed = read_QPC() - start;
    cout << "Time [us] = " << fixed << setprecision(0) << (1000000.0 * elapsed) / frequency << endl << endl;

    //showArray(newArr, arrSize);

    // Usuwanie liczby z tylu
    cout<<"Usuwanie liczby z tylu"<<endl;

    start = read_QPC();

    arrSize-=1;
    arr = new int[arrSize];
    popBackArr(arr, newArr, arrSize);
    delete [] newArr;

    elapsed = read_QPC() - start;
    cout<<"Czas [us] = "<<fixed<<setprecision(0)<< (1000000.0 * elapsed) / frequency <<endl<<endl;

    //showArray(arr, arrSize);

    // usuwanie liczby z przodu

     cout<<"Usuwanie liczby z przodu"<<endl;

    start = read_QPC();

    arrSize-=1;
    newArr = new int[arrSize];
    popFrontArr(arr, newArr, arrSize);
    delete [] arr;

    elapsed = read_QPC() - start;
    cout<<"Czas [us] = "<<fixed<<setprecision(0)<< (1000000.0 * elapsed) / frequency <<endl<<endl;

    //showArray(newArr, arrSize);

    // usuwanie liczby na ideksie

    cout<<"Usuwanie liczby na ineksie"<<endl;
    cout<<"Podaj pozycje na ktorej chcesz usunac liczbe: ";
    cin>>position;

    start = read_QPC();

    arrSize-=1;
    arr = new int[arrSize];
    popAtIdArr(arr, newArr, arrSize, position);
    delete [] newArr;

    elapsed = read_QPC() - start;
    cout<<"Czas [us] = "<<fixed<<setprecision(0)<< (1000000.0 * elapsed) / frequency <<endl<<endl;

    //showArray(arr, arrSize);

    delete [] arr;
}
Editor is loading...