#include<iostream>
using namespace std;
typedef struct node{
int key;
struct node* next;
node(int k) :key(k), next(NULL){}
}node;
void bucket_sort(int nums[],int len,int bucket_size){
node** bucket_table = new node*[bucket_size];
for (int i = 0; i < bucket_size; i++)
bucket_table[i] = new node(0);
for (int i = 0; i < len; i++){
node* n = new node(nums[i]);
int index = nums[i] / 10;
node* p = bucket_table[index];
if (p->key == 0){
p->next = n;
bucket_table[index]->key++;
}else{
while (p->next != NULL&&p->next->key <= nums[i])
p = p->next;
n->next = p->next;
p->next = n;
bucket_table[index]->key++;
}
}
for (int i = 0; i < bucket_size; i++){
for (node* p = bucket_table[i]->next; p != NULL; p = p->next)
cout << p->key << " ";
}
cout << endl;
}
int main(){
int nums[] = { 49, 38, 32, 36, 37, 38, 34, 55 };
int len = sizeof(nums) / sizeof(int);
bucket_sort(nums, len, 10);
return 0;
}