Zadanie porównanie czasów działania sortowania

0

Witam, mam zadanie typu porównanie czasów działania sortowania przez wybór w wersji sekwencyjnej, z podziałem na połówki (realizacja sekwencyjna) i w realizacji współbieżne (być może ze zrównolegleniem łączenia z sortowaniem). Zatrzymałem się przez wersji sekwencyjnej (nie wiem naawet co to znacz) z podziałem na połowki, takze problem mam z resztą zadania. Jedynie co mam to sortowanie przez wybór no i czasy wysyłąm kod progrmau.

#include<iostream>
#include<cstdlib>
#include <ctime>
#include <cstdio>
using namespace std;
void czekaj( int iMilisekundy );
void selection_sort(int tab[],int n);
double obliczSekundy( clock_t czas );

int main()
{

	int *tab, n;

	cout<<"Ile liczb chcesz posortowac? ";
	cin>>n;
    printf( "Uruchomilem aplikacje -> %.4fsek\n", obliczSekundy( clock() ) );

	tab = new int [n];

	for(int i=0;i<n;i++)
		cin>>tab[i]; //wczytanie liczb do posortowania
    printf( "Wpisalem dane -> %.4fsek\n", obliczSekundy( clock() ) );

	selection_sort(tab,n); //sortowanie przez selekcję

	for(int i=0;i<n;i++)
		cout<<tab[i]<<" "; //wypisanie posortowanych elementów
    printf( "Czas wykonania sortowania -> %.4fsek\n", obliczSekundy( clock() ) );

	cout<<endl;
    printf( "Calkowity czas %.4fsek od jej startu.\n", obliczSekundy( clock() ) );
	system("pause");
	return 0;
}





void selection_sort(int tab[],int n) //n - ilość elementów do posortowania
{
int mn_index; //zmienna pomocnicza przechowująca indeks komórki
        //z minimalną wartością
  for(int i=0;i<n-1;i++)
  {
  	mn_index = i;
    for(int j=i+1;j<n;j++) //pętla wyszukuje najmniejszy element w podzbiorze nieposortowanym
    if(tab[j]<tab[mn_index])
      mn_index = j;

    //zamiana elementu najmniejszego w podzbiorze z pierwszą pozycją nieposortowaną
	swap(tab[i], tab[mn_index]);
  }


}



void czekaj( int iMilisekundy )
{
    clock_t koniec = clock() + iMilisekundy * CLOCKS_PER_SEC / 1000.0;
    while( clock() < koniec ) continue;

}

double obliczSekundy( clock_t czas )
{
    return static_cast < double >( czas ) / CLOCKS_PER_SEC;
}

0

Użyj gotowego rozwiązania, np catch2
https://godbolt.org/z/oqvfYE

0

catch2 to nie moja bajka ale przepatrzę co tam jest :)

3

Użyłeś clock, które ma za małą rozdzielczość czasową i nie nadaje się do pomiarów wydajności.
Zamiast kombinować z std::chrono prościej jest użyć catch2, które jest proste w użyciu i instalacji, dlatego ci je proponuje.
Poza tym znajomość jakiegokolwiek narzęzia do pisania testów powinna być obowiązkowa dla każdego studenta informatyki.
Zakładam, że jesteś studentem informatyki, bo masz sprawdzić prefomance oraz wielowątkowość.
A skoro studiujesz informatykę (lub coś pokrewnego) to powinieneś sam napisać rożne metody sortowania sam.
https://godbolt.org/z/xc1c5r

Jak pokarzesz, napisane samodzielnie kilka metod sortowania, to pomogę z wersją wielowątkową.

0

Do benchmarków to jest spoko strona: https://quick-bench.com/

1 użytkowników online, w tym zalogowanych: 0, gości: 1