Sortowanie kubełkowe - nie do końca rozumiem jak to ma działać

0

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;
}
0

To bierzesz jakikolwiek kurs z googla i po kilku tygodniach będziesz taki kod rozumieć "z palcem w nosie".

1

Problem polega na tym, że kompletnie nie umiem się w nim odnaleźć

Skup się na implementacji funkcji sortuj_kubelkowo, reszta kodu nie powinna Cię interesować.

1

TUTAJ możesz poczytać o sortowaniu kubełkowym, jest też przykład kodu, więc powinieneś sobie poradzić (w razie czego, na yt jest sporo filmów z wyjaśnieniem zasady działania bucket sort).

0

@tmk3: Ooo dziękuję :D

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