• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czas działania algorytmów i tablice ponad 1000 elementowe c++

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Camylovski Nowicjusz (120 p.)

Witam
Mam napisać program który ma obliczyć czas działania dwóch sortowań oraz dwóch porównań.
Przykładowo podając rozmiar tablicy jako 100 , po kompilacji wyświetla się że czas działania dla dwóch sortowań i wyszukiwani jest identyczny a raczej tak nie powinno być(czasem występuje różnica 0.0001-2 sek).Próbowałem wielu sposobów aby to naprawić lecz żaden nie pomógł.Problem pojawia się również gdy podając rozmiar tablicy który wynosi 1000 lub więcej, program pokazuje wynik czasowy tylko dla pierwszego sortowania a reszty jakby nie widział. Co musiałbym zmienić żeby program działał tak jak powinien?
 

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>

int x;

using namespace std;
void sortowanie(int l,int p)
{
	int tab[x];
	int i,j,pt;
i = (l+p)/2;
pt=tab[i]; tab[i] = tab[p];
for(j=i=p; i<p;i++)
if(tab[i]<pt)
{
	swap(tab[i],tab[j]);
	j++;
	}	
tab[p]=tab[j];tab[j]=pt;
 if(l < j - 1)  sortowanie(l, j - 1);
  if(j + 1 < p) sortowanie(j + 1, p);
}
int szukanie(int ll,int pp,long sz)
{
	int tab[x];
	int m;
	while(ll<=pp)
	{
	m=(ll+pp)/2;
	if (tab[m] == sz)
	return m;
	
	if(tab[m]>sz)
	pp=m-1;
	else
	ll=m+1;	
	}
	
}

	
	

int main()
{
	cout<<"podaj ilosc elementow tablicy";
cin>>x;
	clock_t start,end;
	clock_t start1;
	clock_t end1;
	clock_t start2;
	clock_t end2;
    int tab[x];
    srand(time(NULL));
    for(int i=0; i<x; i++)
    {
        tab[i]=rand()%100;
    }
start1=clock();
 	  for (int i=0; i<x; i++)
    {
        for (int j=0; j<x; j++)
        {
            if (tab[j]>tab[j+1])
            {
                swap(tab[j], tab[j+1]);
         
			}
            
        }
    }
   end1=clock();
   float czas1=(end1-start1/CLOCKS_PER_SEC)/1000.0;
   cout<<"czas dla sortowania prostego :"<<czas1<<"sek";

cout<<endl;
 start=clock();
 	 sortowanie(0,x - 1);  
end=clock();
float czas=(end-start/CLOCKS_PER_SEC)/1000.0;
cout<<"czas dla sortowania zlozonego"<<czas<<"sek"<<endl;
cout<<endl;
int s=15;
start2=clock();
 for(int i = 0; i < x; i++)
    {
        if(tab[i] == s) break;
    }
      end2=clock();
      float czas2=(end2-start2/CLOCKS_PER_SEC)/1000.0;
      cout<<"czas dla wyszukiwania liniowego : "<<czas2<<"sek"<<endl;
clock_t start3;
clock_t end3;
int sz=13;
start3=clock();
szukanie(0,x-1,sz);
end3=clock();
double czas3=(end3-start3/CLOCKS_PER_SEC)/1000.0;
cout<<"czas dla wyszukiwania binarnego : "<<czas3<<"sek";
   
 

 return 0;
 
}

 

komentarz 29 stycznia 2021 przez j23 Mędrzec (194,920 p.)

Ta definicja tablicy tab w szukanie to po co tam jest?

komentarz 30 stycznia 2021 przez Camylovski Nowicjusz (120 p.)
Dodałem ją ponieważ gdy nie było tej definicji to co chwilę wywalało błąd
komentarz 30 stycznia 2021 przez Oscar Nałogowiec (29,320 p.)
  1. Wolniejszej implementacji sortowania bąbelkowego już chyba nie da się napisać. ;)
  2. w instrukcji
       float czas1=(end1-start1/CLOCKS_PER_SEC)/1000.0;
    

    musisz uwzględnić kolejność działań, sam sens wyrażenia (wynik w sekundach jeszcze dzielisz przez 1000?) i sprawdzić gdzie jest dzielenie całkowite.

komentarz 30 stycznia 2021 przez j23 Mędrzec (194,920 p.)

@Camylovski, tylko w ten sposób sortujesz lokalną tablicę wypełnioną przypadkowymi danymi (każde wywołanie rekurencyjne może mieć inną zawartość tablicy).

Tak zrób:

void sortowanie(int* tab, int l,int p)
{
        ...

        if(l < j - 1) sortowanie(tab, l, j - 1);
        if(j + 1 < p) sortowanie(tab, j + 1, p);
}

szukanie popraw w analogiczny sposób.

cin >> x;

int tab[x];

To nie jest poprawne w C++. Użyj vectora:

unsigned x;

cin >> x;

std::vector<int> tab(x);
...

sortowanie(&tab.front(), ...);

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 448 wizyt
pytanie zadane 5 lutego 2021 w C i C++ przez Osama Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 463 wizyt
pytanie zadane 11 stycznia 2016 w C i C++ przez Dawid Zarzycki Nowicjusz (170 p.)
+1 głos
1 odpowiedź 345 wizyt
pytanie zadane 23 stycznia 2022 w C i C++ przez Doge Gaduła (3,370 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...