#include <iostream>
#include <vector>
#include <list>
using namespace std;
class BucketSort {
private:
vector<double> vec;
vector<list<double> > vecLis;
public:
void init();
void bucketSort();
void divide();
void collection();
int getIndex(double value);
void traverse();
};
void BucketSort::bucketSort() {
divide();
collection();
}
void BucketSort::collection() {
for (vector<list<double> >::iterator iter = vecLis.begin(); iter != vecLis.end(); iter++) {
vec.insert(vec.end(), (*iter).begin(), (*iter).end());
}
}
int BucketSort::getIndex(double value) {
return value*10;
}
void BucketSort::divide() {
for (vector<double>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
list<double>::iterator liter;
for (liter = vecLis.at(getIndex(*iter)).begin(); liter != vecLis.at(getIndex(*iter)).end(); liter++) {
if (*liter >= *iter) {
break;
}
}
vecLis.at(getIndex(*iter)).insert(liter, *iter);
}
vec.clear();
}
void BucketSort::init() {
std::cout << "how many elements[0-1) do you want to enter:";
int count;
std::cin >> count;
double element;
for (int i = 0; i < count; i++) {
std::cin >> element;
vec.push_back(element);
}
vecLis.resize(10);
}
void BucketSort::traverse() {
for (vector<double>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
std::cout << *iter << " ";
}
std::cout << endl;
}
int main() {
BucketSort *bs = new BucketSort();
bs->init();
bs->bucketSort();
bs->traverse();
return 0;
}
输入:10
0.79 0.13 0.16 0.64 0.39 0.20 0.89 0.53 0.71 0.42