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

Sortowanie Shella/przez scalanie

Object Storage Arubacloud
+1 głos
763 wizyt
pytanie zadane 5 czerwca 2017 w C i C++ przez mazak12 Nowicjusz (150 p.)

Witam mam za zadanie napisać algorytm sortowania Shella oraz sortowanie przez scalanie (ale najpierw zajmijmy się tym 1), który będzie również podawał czas sortowania. Następnie muszę zrobić w excelu na podstawie danych z sortowania wykres t-czasu od n-rozmiaru danych(ilość liczb do sortowania). Dane do excela mogę przenieść ręcznie, ale chodzi mi o to aby program automatycznie zapisywał te dane do excela ( klasa ofstream?? ). Proszę o pomoc z tym zapisywaniem danych oraz opinie na temat mojego kodu sortowania coś zmienić/poprawić, czy funkcja mierząca czas sortowania jest prawidłowa?

#include <iostream>
#include <math.h>
#include <iomanip>
#include <ctime>
#include <cstdlib>
#include <cstdio>

using namespace std;

int main()
{
    

  int dl,i,j,liczba,ile,n;
  cout << "Sortowanie algorytm Shella";
  cout<<"\nPodaj ile liczb chcesz posortowac: ";
  cin>>ile;
  int *tablica=new int[ile];
  
  cout<<"\nPodaj maksymalna liczbe w zbiorze: ";
  cin>>n;
  cout<<"\n\n";
  
  system("cls");    


  
  srand((unsigned)time(NULL));

  for(i = 0; i < ile; i++) 
  tablica[i] = rand() % n + 1;
  

  cout<<"\n\n\t\t Zbior "<<ile<<" liczb\n\n";

  
  
  cout<<"\n\n";
  
  system("cls"); 



for(dl = 1; dl < ile; dl = 3 * dl + 1);
    dl /= 9;
  
clock_t s, f;
double czas=0;
s = clock();
    

  while(dl)
  {
    for(j = ile - dl - 1; j >= 0; j--)
    {
      liczba = tablica[j];
      i = j + dl;
      while((i < ile) && (liczba > tablica[i]))
      {
        tablica[i - dl] = tablica[i];
        i += dl;
      }
      tablica[i - dl] = liczba;
    }
    dl /= 3;
  }



  cout << "\n\n\t\tZbior "<<ile<< " liczb posortowany za pomoca algorytmu Shella\n\n";
  for(i = 0; i < ile; i++) 
  cout << setw(5) << tablica[i];
 
   
 
  cin.ignore();
  getchar();

f = clock();
czas = (double)(f - s) / (double)(CLOCKS_PER_SEC);
cout << czas << endl;
system ("PAUSE");
  
  return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 6 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Dane zapisuj do pliku w formacie CSV, oczywiście z wykorzystaniem strumienia ofstream.

komentarz 6 czerwca 2017 przez mazak12 Nowicjusz (150 p.)
#include <iostream>
#include <math.h>
#include <iomanip>
#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <fstream> 

using namespace std;

int main()
{
    

  int dl,i,j,liczba,ile,n;
  cout << "Sortowanie algorytm Shella";
  cout<<"\nPodaj ile liczb chcesz posortowac: ";
  cin>>ile;
  int *tablica=new int[ile];
  
  cout<<"\nPodaj maksymalna liczbe w zbiorze: ";
  cin>>n;
  cout<<"\n\n";
  
  system("cls");    


  
  srand((unsigned)time(NULL));

  for(i = 0; i < ile; i++) 
  tablica[i] = rand() % n + 1;
  

  cout<<"\n\n\t\t Zbior "<<ile<<" liczb\n\n";

  
  
  cout<<"\n\n";
  
  system("cls"); 



for(dl = 1; dl < ile; dl = 3 * dl + 1);
    dl /= 9;
  
clock_t s, f;
double czas=0;
s = clock();
    

  while(dl)
  {
    for(j = ile - dl - 1; j >= 0; j--)
    {
      liczba = tablica[j];
      i = j + dl;
      while((i < ile) && (liczba > tablica[i]))
      {
        tablica[i - dl] = tablica[i];
        i += dl;
      }
      tablica[i - dl] = liczba;
    }
    dl /= 3;
  }



  cout << "\n\n\t\tZbior "<<ile<< " liczb posortowany za pomoca algorytmu Shella\n\n";
  for(i = 0; i < ile; i++) 
  cout << setw(5) << tablica[i];
 
   
 
  cin.ignore();
  getchar();

f = clock();
czas = (double)(f - s) / (double)(CLOCKS_PER_SEC);
cout << czas << endl;
 ofstream NowyPlik;
   NowyPlik.open("D:\\excelczas1.CSV", ios::app);
   NowyPlik<<czas;
   NowyPlik<<" "; 
   NowyPlik<<ile<<endl;
   NowyPlik.close();
 
   cin.get();
  
  return 0;
}

Dobra program tworzy plik excelczas1.csv i zapisuje w nim czas t i rozmiar danych n. A czy da się zrobić tak żeby rozmiar zapisywał w wierszu obok czasu w excelu?

komentarz 7 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Chyba nie rozumiem pytania. Musisz inaczej je sformułować.

 

Podziel kod na funkcje. Jak masz robić wykres czasu względem ilości danych do posortowania, to program powinien z automatu robić serię pomiarów dla różnych ilości danych (np. 10, 100, 1000, 100000, itd.), zamiast pytać się, ile danych ma posortować. Czasy kolejnych prób dopisujesz do pliku np. tak:

ofile << N << ';' << merge_time << ';' << shell_time << '\n';

 

 

komentarz 7 czerwca 2017 przez mazak12 Nowicjusz (150 p.)
Czasy i rozmiar danych(ilość liczb do sortowania) program wpisuje mi do excela ale wpisuje w tej samej komóce po spacji. Zastanawiam czy się czy można zrobić tak aby czas wpisywał w 1 komórce czas a rozmiar danych dla tego czasu w komórce obok. Kolejne czasy mi dopisuje pod wcześniejszymi
komentarz 7 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Komórki oddzielaj średnikiem - vide przykład z poprzedniego komentarza.

Podobne pytania

0 głosów
0 odpowiedzi 141 wizyt
0 głosów
2 odpowiedzi 625 wizyt
0 głosów
2 odpowiedzi 697 wizyt
pytanie zadane 13 maja 2017 w C i C++ przez Ala123456 Użytkownik (760 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 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!

...