#include <stdio.h>
#include<limits.h>
//Function to find maximum element of the array
int max_element( int array[ ] , int size)
{
int max = INT_MIN;
for ( int i = 0 ; i < size; i++ )
{
//Updating max when array[i] is greater than max
if ( array[ i] > max)
max = array[ i] ;
}
//return the max element
return max;
}
//Implementing bucket sort
void Bucket_Sort( int array[ ] , int size)
{
//Finding max element of array which we will use to create buckets
int max = max_element( array, size) ;
// Creating buckets
int bucket[ max+ 1 ] ;
//Initializing buckets to zero
for ( int i = 0 ; i <= max; i++ )
bucket[ i] = 0 ;
// Pushing elements in their corresponding buckets
for ( int i = 0 ; i < size; i++ )
bucket[ array[ i] ] ++;
// Merging buckets effectively
int j= 0 ; // j is a variable which points at the index we are updating
for ( int i = 0 ; i <= max; i++ )
{
// Running while loop until there is an element in the bucket
while ( bucket[ i] > 0 )
{
// Updating array and increment j
array[ j++ ] = i;
// Decreasing count of bucket element
bucket[ i] --;
}
}
}
int main( )
{
int array[ 100 ] = { 5 , 10 , 9 , 8 , 12 } ;
int i ;
int num = 5 ;
printf ( "Enter the size of array: " ) ;
//scanf("%d", &num);
printf ( "Enter the %d elements to be sorted:\n " , num
) ;
//for (i = 0; i < num; i++)
// scanf("%d", &array[i]);
printf ( "\n The array of elements before sorting: \n " ) ;
for ( i = 0 ; i < num; i++ )
printf ( "\n The array of elements after sorting: \n " ) ;
// Calling bucket sort function
Bucket_Sort( array, num) ;
for ( i = 0 ; i < num; i++ )
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZTxsaW1pdHMuaD4KCiAKCi8vRnVuY3Rpb24gdG8gZmluZCBtYXhpbXVtIGVsZW1lbnQgb2YgdGhlIGFycmF5CgppbnQgbWF4X2VsZW1lbnQoaW50IGFycmF5W10sIGludCBzaXplKSAKCnsgIAoKCglpbnQgbWF4ID0gSU5UX01JTjsgIAoKCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQoKCXsKCgkvL1VwZGF0aW5nIG1heCB3aGVuIGFycmF5W2ldIGlzIGdyZWF0ZXIgdGhhbiBtYXgKCgkJaWYgKGFycmF5W2ldID4gbWF4KSAgCgoJCW1heCA9IGFycmF5W2ldOyAgCgoJfQoKCS8vcmV0dXJuIHRoZSBtYXggZWxlbWVudAoKCXJldHVybiBtYXg7ICAKCn0KCiAKCi8vSW1wbGVtZW50aW5nIGJ1Y2tldCBzb3J0IAoKdm9pZCBCdWNrZXRfU29ydChpbnQgYXJyYXlbXSwgaW50IHNpemUpIAoKeyAgCgogICAgLy9GaW5kaW5nIG1heCBlbGVtZW50IG9mIGFycmF5IHdoaWNoIHdlIHdpbGwgdXNlIHRvIGNyZWF0ZSBidWNrZXRzCgogICAgaW50IG1heCA9IG1heF9lbGVtZW50KGFycmF5LCBzaXplKTsgCgogCgogICAgLy8gQ3JlYXRpbmcgYnVja2V0cyAKCiAgICBpbnQgYnVja2V0W21heCsxXTsgIAoKIAoKICAgIC8vSW5pdGlhbGl6aW5nIGJ1Y2tldHMgdG8gemVybwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG1heDsgaSsrKSAgCgogICAgCWJ1Y2tldFtpXSA9IDA7ICAKCiAKCiAgICAvLyBQdXNoaW5nIGVsZW1lbnRzIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgYnVja2V0cwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAgCgogICAgCWJ1Y2tldFthcnJheVtpXV0rKzsKCiAKCiAgICAvLyBNZXJnaW5nIGJ1Y2tldHMgZWZmZWN0aXZlbHkKCiAgICBpbnQgaj0wOyAgIC8vIGogaXMgYSB2YXJpYWJsZSB3aGljaCBwb2ludHMgYXQgdGhlIGluZGV4IHdlIGFyZSB1cGRhdGluZwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG1heDsgaSsrKSAgCgogICAgeyAKCiAgICAgICAgLy8gUnVubmluZyB3aGlsZSBsb29wIHVudGlsIHRoZXJlIGlzIGFuIGVsZW1lbnQgaW4gdGhlIGJ1Y2tldAoKICAgICAgICB3aGlsZSAoYnVja2V0W2ldID4gMCkgIAoKICAgICAgICB7ICAKCiAgICAgICAgICAgIC8vIFVwZGF0aW5nIGFycmF5IGFuZCBpbmNyZW1lbnQgaiAgICAgICAgICAKCiAgICAgICAgICAgIGFycmF5W2orK10gPSBpOyAgCgogCgogICAgICAgICAgICAvLyBEZWNyZWFzaW5nIGNvdW50IG9mIGJ1Y2tldCBlbGVtZW50CgogICAgICAgICAgICBidWNrZXRbaV0tLTsgICAKCiAgICAgICAgfSAgCgogICAgfSAgCgp9ICAKCiAKCgppbnQgbWFpbigpCgp7CgogICAgaW50IGFycmF5WzEwMF0gPSB7NSwgMTAsIDksIDgsIDEyfTsKICAgIGludCBpIDsgCiAgICBpbnQgbnVtID0gNTsgCgogCgogICAgcHJpbnRmKCJFbnRlciB0aGUgc2l6ZSBvZiBhcnJheTogIik7ICAgCgogICAvL3NjYW5mKCIlZCIsICZudW0pOyAgIAoKICAgIHByaW50ZigiRW50ZXIgdGhlICVkIGVsZW1lbnRzIHRvIGJlIHNvcnRlZDpcbiIsbnVtKTsgCgogICAgLy9mb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCgogICAgIC8vICAgc2NhbmYoIiVkIiwgJmFycmF5W2ldKTsgCgogICAgcHJpbnRmKCJcblRoZSBhcnJheSBvZiBlbGVtZW50cyBiZWZvcmUgc29ydGluZzogXG4iKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCgogICAgICAgIHByaW50ZigiJWQgIiwgYXJyYXlbaV0pOyAgCgogICAgcHJpbnRmKCJcblRoZSBhcnJheSBvZiBlbGVtZW50cyBhZnRlciBzb3J0aW5nOiBcbiIpOyAKCiAKCiAgICAvLyBDYWxsaW5nIGJ1Y2tldCBzb3J0IGZ1bmN0aW9uIAoKICAgIEJ1Y2tldF9Tb3J0KGFycmF5LCBudW0pOyAKCiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCgogICAgICAgIHByaW50ZigiJWQgIiwgYXJyYXlbaV0pOyAgIAoKICAgIHByaW50ZigiXG4iKTsgICAgIAoKICAgIHJldHVybiAwOwoKfQ==