#include <stdio.h>
void quick_sort(float a[], int L, int R) {
int left, right;
float pivot = a[L];
for(left=L,right=R; left<right; right--) {
while( a[right]>=pivot && left<right ) right--;
if( left<right ) a[left] = a[right];
while( a[left]<=pivot && left<right ) left++;
if( left>=right ) break;
a[right] = a[left];
}
a[left]=pivot;
if(left>L) quick_sort(a, L, left-1);
if(left<R) quick_sort(a, left+1, R);
}
void bucket_sort(float a[], int size) {
float buckets[size][size];
int i, j, pos, bi, buckets_size[size];
for(i=0; i<size; i++) {
buckets_size[i] = 0;
for(j=0; j<size; j++) buckets[i][j] = 9999;
}
for(i=0; i<size; i++) {
bi = (int)(size*a[i]);
buckets[bi][buckets_size[bi]] = a[i];
buckets_size[bi]++;
}
for(i=0; i<size; i++) {
quick_sort(buckets[i], 0, buckets_size[i]-1);
}
pos = 0;
for(i=0; i<size; i++) {
for(j=0; j<buckets_size[i]; j++) {
a[pos++]=buckets[i][j];
}
}
}
int main() {
float arr[] = {0.9, 0.1, 0.22, 0.99, 0.0, 0.4, 0.22};
int size = sizeof(arr)/sizeof(int);
bucket_sort(arr, size);
for(int i=0; i<size; i++) printf("%.2f ", arr[i]);
// 0.00 0.10 0.22 0.22 0.40 0.90 0.99
}