Napisałem funkcję która ma przeprowadzać bucket sort w tablicy intów, ale nie jestem w stanie poprawnie przypisać posortowanej zawartości z powrotem.
main:
#include <iostream>
#include "sort.h"
using namespace std;
void bucketSort(int* tab, int n, int m);
int main() {
//[edit]
int n = 18;
int m = 20;
//[edit]
cout << "bucket sort" << endl;
int bs[] = { 9,11,4,7,4,15,3,19,5,8,14,12,12,11,17,4,3,19 };
bucketSort(bs, n, m);
return 0;
}
sort.h
void bucketSort(int *tab, int n, int m) {
double w = (double)m / (double)n;
DynamicArray<int*>* buckets = new DynamicArray<int*>[n];
for (int i = 0; i < n; i++) {
int index = tab[i] / w;
buckets[index].addInOrder(&tab[i]);
}
int pos = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < buckets[i].getSize(); j++) {
std::cout << pos << ": " << *buckets[i].get(j) << std::endl;
//tab[pos] = *buckets[i].get(j);
pos++;
}
}
delete []buckets;
}
output kodu który jest powyżej:
output kiedy odkomentuję linię w ostatniej pętli funkcji sortującej: