Untitled

 avatar
unknown
c_cpp
2 years ago
3.2 kB
6
Indexable
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <chrono>

int rozmiar = 10000;
int rozmiar2 = rozmiar;

void heapify(int* tab, int heap_size, int i)
{
    int largest, temp;
    int l = 2 * i, r = (2 * i) + 1;
    if (l <= heap_size && tab[l] > tab[i])
        largest = l;
    else largest = i;
    if (r <= heap_size && tab[r] > tab[largest])
        largest = r;
    if (largest != i)
    {
        temp = tab[largest];
        tab[largest] = tab[i];
        tab[i] = temp;
        heapify(tab, heap_size, largest);
    }
}

void budKopiec(int* tab, int rozmiar)
{
    for (int i = rozmiar / 2; i > 0; i--)
        heapify(tab, rozmiar, i);
}

void sort(int* tab, int rozmiar) {
    int temp;
    budKopiec(tab, rozmiar);
    for (int i = rozmiar; i > 1; i--)
    {
        temp = tab[i];
        tab[i] = tab[1];
        tab[1] = temp;
        rozmiar--;
        heapify(tab, rozmiar, 1);
    }
}

usuwanie(int* tab, int& rozmiar) {
    tab[rozmiar] = 0;
    rozmiar = rozmiar - 1;
}

int main()
{
    srand(time(NULL));
    int random;
    /*
    std::aborthigh_resolution_clock::time_point t1 = high_resolution_clock::now();
    std::cout << "Moj kopiec binarny: " << std::endl;
    */
    int* tab = new int[rozmiar + 1];

    for (int i = 1; i <= rozmiar; i++)
    {
        random = rand();
        tab[i] = random;
    }

    sort(tab, rozmiar);
    /*
    for (int i=rozmiar;i>=1;i--)
    cout<<tab[i] << " ";
    cout << endl;
    */
    std::cout << "Max wynosi: " << tab[rozmiar] << std::endl;

    usuwanie(tab, rozmiar);

    std::cout << "Po usunieciu maksymalnego elementu: " << std::endl;
    /*
    for (int i=rozmiar;i>=1;i--)
    cout<<tab[i] << " ";
    cout << endl;
    */
    std::cout << "Max wynosi: " << tab[rozmiar] << std::endl;
    /*
    std::high_resolution_clock::time_point t2 = high_resolution_clock::now();
    duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
    std::cout << "Czas mojego algorytmu kopca binarnego wynosi: " << time_span.count() << " seconds." << std::endl;
    */
    std::cout << "******************************************************************************************************************" << std::endl;
    /*
    std::high_resolution_clock::time_point t3 = high_resolution_clock::now();
*/
    priority_queue<int> q1;

    for (int i = 1; i <= rozmiar2; i++){
        random = rand();
        q1.push(random);
    }

    const int& ii = q1.top();
    std::cout << "Maksymalny element priority_queue wynosi: "<< ii << "." << std::endl;

    q1.pop();

    const int& iv = q1.top();
    
    std::cout << "Po usunieciu najwiekszego elementu, maksymalny element priority_queue wynosi: " << iv << "." << std::endl;
    /*
    high_resolution_clock::time_point t4 = high_resolution_clock::now();
    duration<double> time_span2 = duration_cast<duration<double>>(t4 - t3);
    std::cout << "Czas algorytmu z priority_queue: " << time_span2.count() << " seconds." << std::endl;
    */
    return 0;
}

Editor is loading...