Hej, dostałem ostatnio od nauczyciela taki kod i mam w nim uzupełnić sortowanie kubełkowe. Problem polega na tym, że kompletnie nie umiem się w nim odnaleźć, a nauczyciel tłumaczy tak, że nic nie tłumaczy. Może ktoś będzie w stanie się w tym rozeznać... Z góry dzięki za pomoc
#include <iostream>
#include <vector>
#include <cassert>
#include <stdlib.h>
#include <time.h>
using namespace std;
void sortuj_przez_wstawianie(double* tablica, unsigned int rozmiar)
{
// tu nalezy zaimplementowac sortowanie tablicy przez wstawianie (ang. insert sort)
int pom, j;
for(int i=1; i<rozmiar; i++){
pom = tablica[i];
j = i-1;
while(j >= 0 && tablica[j] > pom){
tablica[j+1] = tablica[j];
--j;
}
tablica[j+1] = pom;
}
}
void sortuj_kubelkowo(double* tablica, unsigned int rozmiar)
{
// tu nalezy uzupelnic implementacje sortowania kubelkowego (ang. bucket sort)
// ustalenie ilosci kubelkow
// -------------------------
unsigned int ilosc_kubelkow = 1000; // rozmiar / 100 + 1;
// ustalenie szerokości kubleka (min i max)
// ----------------------------------------
double min, max, szerokosc_kubelka;
// stworzenie kubelkow (zobacz: http://www.cplusplus.com/reference/vector/vector/)
vector<double> *kubelki = new vector<double>[ilosc_kubelkow];
// przepisanie danych do kubelkow
// ------------------------------
for(int i = 0; i < o){
}
// sortowanie kubelkow
// -------------------
// przepisanie danych z kubelkow do tablicy
// ----------------------------------------
delete[] kubelki;
}
// zdefiniowanie typu dla funkcji sortujacej
// (zobacz https://cpp0x.pl/kursy/Kurs-C++/Poziom-X/Wskaznik-na-funkcje/249)
typedef void ( * funkcja_sortujaca )( double *, unsigned int );
// Funkcja sprawdz_algorytm_sortowania testuje algorytm sortowania i jesli jest poprawny
// zwraca czas w milisekundach, jaki zajelo wykonanie sortowania
// przyjmuje ona jako argumenty:
// - tablica: wskaznik do tablicy z danymi do posortowania (double *)
// - rozmiar: wielkosc tablicy (unsigned int)
// - sortuj: wskaznik do funcji sortujacej (funkcja_sortujaca, patrz definicja powyzej)
int sprawdz_algorytm_sortowania(double *tablica, unsigned int rozmiar, funkcja_sortujaca sortuj ) {
clock_t start, stop; //tu zapamietamy moment rozpoczecia i zakonczenia sortowania
//zapamietaj czas maszynowy rozpoczecia sortowania
start = clock(); // zobacz: http://www.cplusplus.com/reference/ctime/clock/
// wykonaj algorytm
sortuj(tablica, rozmiar);
//zapamietaj czas zakonczenia sortowania
stop = clock();
for (unsigned int i; i < rozmiar - 1; i++ ) {
assert( tablica[i] <= tablica [i+1]);
}
//zwroc czas w milisekundach
return 1000 * (stop - start) / CLOCKS_PER_SEC;
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
unsigned int min_n = 10000; // minimalna wielkosc tablicy testowej
unsigned int max_n = 110000; // maksymalna wielosc tablicy testowej
//tablice do sortowania
double *tablica_insert, *tablica_bucket;
//cout << scientific;
cout.precision(3);
cout << "Czasy sortowania [ms]:" << endl;
cout << "------------------" << endl;
cout << "\t\t|| Wejscie nieposortowane \t \t|| Wejscie posortowane \t \t \t||" << endl;
cout << "Rozmiar danych\t|| Przez Wstawianie\t| Kublekowe\t|| Przez Wstawianie\t| Kublekowe\t||" << endl;
for (unsigned int n = min_n; n < max_n; n = n + min_n ) {
// przygotowanie pamieci na dane
// czas wykonania dla danych nie popsortowanych
tablica_insert = new double[n];
tablica_bucket = new double[n];
cout << n << "\t\t|| ";
// wypelnienie tablicy
for(unsigned int i=0; i<n; i++) {
tablica_insert[i] = (double)rand()/RAND_MAX * 1000.0;
tablica_bucket[i] = tablica_insert[i];
}
// czas wykonania dla danych nie popsortowanych
cout << sprawdz_algorytm_sortowania(tablica_insert, n, sortuj_przez_wstawianie ) << "\t\t\t| ";
cout << sprawdz_algorytm_sortowania(tablica_bucket, n, sortuj_kubelkowo ) << "\t\t|| ";
// czas wykonania dla danych nie popsortowanych
cout << sprawdz_algorytm_sortowania(tablica_insert, n, sortuj_przez_wstawianie ) << "\t\t\t| ";
cout << sprawdz_algorytm_sortowania(tablica_bucket, n, sortuj_kubelkowo ) << "\t\t||"<< endl;
// zwolnij pamiec
delete[] tablica_insert;
delete[] tablica_bucket;
}
return 0;
}