×

Bucket Sort in Java

Bucket sort is also called bin sort. Bucket sort first puts the elements of the array or list into different buckets. The first bucket contains elements of the smallest value. The second bucket contains elements that are greater than elements that are present in the first bucket. Similarly, the third bucket contains elements that are greater than the second bucket’s elements, and so on. Thus, buckets are sorted. After that, one by one, each bucket is taken and sorted. Bucket sort is specifically used when input numbers are distributed in a uniform manner over a given range. 

In this section, we will implement bucket sort approach in a Java program.

Algorithm  

Step I: Create an empty bucket.

Step II: Distribute elements of the input array in such a way that buckets are sorted automatically.

Step III: Iterative over each bucket and check whether it is empty or not. If the bucket is empty, move to the next bucket. If the bucket is not empty, sort the elements present in the array.

Step IV: Concatenate the elements of buckets one by one. The array or list thus formed is the sorted array or list.

Pseudo Code

Java Program
The following code implements Bucket sort using the pseudo-code defined above.

FileName: BucketSortExample.java


Output:

Explanation: The size of the input array is 8. Therefore, the first element, 0.697, goes in the 5th bucket [0.697 * 8 = 5.576 => 5 (taking only the integral part)]. The second element goes in the bucket whose index is the integer part of 3.72 (0.465 * 8 = 3.72), which is 3. In the same way, the other elements can also be put into different buckets. The following diagram illustrates the same.

Bucket Sort in Java
Bucket Sort in Java

After putting every number in the buckets, the static method sort() is called on each bucket to sort the elements fetched by the buckets.

As per the pseudo-code, the last part is concatenation, which is nothing but re-writing the input array a[] from starting to ending using the values stored in the buckets. The last for-loop of the method bucketSorting() does the same. The final sorted array is shown below.

Bucket Sort in Java

Sorting numbers having non-zero integer part

So far, we have only sorted numbers that had integer parts as 0 (see the input of the above example). However, the above program fails when numbers like 1.234 are given. To handle such numbers some modification has to be made in the above program. But first of all, observe the algorithm to sort numbers that have a non-zero integer part.

Algorithm 

Step I: Calculate the minimum and maximum elements of the input array.

Step II: Find the range of each bucket.

          range = (maximum – minimum) / N

          Here, N represents the total number of buckets.

Step III: Make N buckets with the help range calculate above.

Step IV: Spread the elements of the array into these buckets, i.e.,
                bucketIdx = ( array[j] – minimum ) / range

Step V: Now, do the sorting of each of the bucket one by one

Step VI: Collect all the sorted elements from the buckets one by one and do the concatenation to form the sorted array.

Now observe the program that is based on the above algorithm.

FileName: BucketSortExample.java

Output:


Explanation: The maximum value element is 8.0934, and the minimum value element is 0.865. Therefore, the range of each of the bucket is:

(integer part of (8.0934) – integer part of (0.865)) / 8 => (8 – 0) / 8 = 1.

Thus, the first element of the input array, 2.697 goes to the integer part of ((2.697 – 0.865) / 1) => 1. Thus, the bucket sitting at index 1 stores the number 2.697. Similarly, the index of the buckets can be calculated for other numbers too.

After determining the index of the bucket for every number, the rest of the code behaves in the same way it is behaving in the previous example.


Analysis of the bucket sort

Bucket Sort works on the scattering and gathering approach. Therefore, it is also known as the distribution sort. The bucket sort is sometimes also called the cousin of radix sort, as this sorting algorithm support moving from the most to least significant digits of a number to do the sorting work.


Time Complexity

The time complexity of bucket sort depends on the distribution of the elements. The uniform distribution leads to a better time-complexity when compared with the non-uniform distribution of elements.

The worst time complexity occurs when all the elements are stored in a single container. The time complexity in this scenario is O(n^2), where n is the total number of elements present in the array.

The best time complexity occurs when there is a uniform distribution of elements in the buckets, which means every bucket contains almost an equal number of elements. The time complexity, in this case, is O(n + p), where O(p) is the time complexity of sorting the elements present in the bucket. In this case, we have to use an algorithm that has the linear time complexity to sort the elements present in the bucket. O(n) is the time complexity for the creation of the buckets.


The average time complexity occurs when elements are randomly distributed in the input array. Thus, every bucket does not contain an equal number of elements. The bucket sort algorithm in such a scenario gives the time complexity as O(n + n^2/p + p), where n is the total number of elements and p is the total number of buckets.

Note that conventionally, insertion sort is used to sort the elements present in a bucket.

Space Complexity

Suppose one has created k buckets to do the sorting of a given array. Therefore, till this point, the space complexity is O(k). Now, the maximum number of elements these buckets can hold is the total number of elements present in the input array. If n represents the total number of elements present in the array, then the space complexity of the bucket sort algorithm is O(n + k).

Conclusion

The bucket sort algorithm cannot be used on any given data set. One has to analyze whether the data is uniformly distributed or not. If the data is not uniformly distributed, this is not the algorithm that should be used to accomplish the sorting process.

Note that counting sort gives a glimpse of counting sort. Think of a scenario when each bucket is holding only one element.


Related Topics

Java Class Keyword

We know that java is object-oriented programming language which contains the essential key concepts such as classes and objects etc to have clear idea about the object-oriented programming.Java is mainly...

3 minutes read.

Java OCR

In this article, you will be acknowledged about what is a tesseract OCR, how it works, what are its used and advantages and disadvantages. Also, you will be able to...

4 minutes read.

Thread Program in Java

Thread Program in Java Thread program in Java is the continuation of multithreading program in Java. In this topic, we will learn about the usage of threads, race condition in multithreading,...

8 minutes read.

Difference between JIT and JVM in Java

In this tutorial, we will discuss the difference between JIT (Just In Time Compiler) and JVM (Java Virtual Machine) in Java. Before we move to the differences, let's understand what...

4 minutes read.

Java Subtract Days from Current Date

Dealing with date and time in Java is not a particularly challenging operation because Java has an API for date and time that simplifies duties for developers. There are two...

3 minutes read.

JAR File in Java

What is a JAR File? JAR stands for Java Archive. It is a file format mainly used to combine many Java class files and the corresponding metadata and resources into one...

4 minutes read.

Java Enum Keyword

Definition: A data type in Java called Enum has a respect to supply of constants. The weekdays (SUN, MON, TUE, WED, THU, FRI, and SAT), directions (NORTH, SOUTH, EAST, and WEST),...

4 minutes read.

How to achieve Multiple Inheritance in Java

Multiple Inheritance is the type of inheritance where one class inherits the properties of more than one super class. For example, class Child inherits (extends) the classes Father and Mother....

4 minutes read.

Java Tutorial

What is Java? Java is an object-oriented, robust, secured and platform-independent programming language. With the help of Java Programming, we can develop console, window, web, enterprise and mobile applications. Java language was...

22 minutes read.

Sliding Window Problem in Java

A sliding window is used in computer science and data science to process large datasets. It involves breaking the dataset into smaller chunks or windows and then processing it in...

6 minutes read.

Pancake Sorting in Java

In the pancake sorting method, the array must be sorted using just one operation, which is: Flip the arrays arr at index 0 to index j by using flipArr(arr, h). Other sorting...

3 minutes read.

GCD Program in Java

GCD Program in Java The GCD program in Java outputs the GCD of the given numbers. In mathematics, Greatest Common Divisor (GCD), Greatest Common Factor or Highest Common Factor (HCF) of...

14 minutes read.

Can Abstract Classes have Static Methods in Java

Abstract Class An abstract class in Java is one that explicitly uses the keyword "abstract" in its declaration. There are options for both non-abstract and abstract techniques (method with the body)....

4 minutes read.

Hashtable in Java

Hashtable in Java The Hashtable class implements the Map interface and extends the Dictionary class. It implements a hash table which shows the key-value relation, i.e., it maps the keys to the values....

9 minutes read.

Java Math subtractExact() Method

The subtractExact() method of Java Math class returns mathematical difference of the specified two arguments, throwing an exception if the result overflows int or long. Syntax: public static int subtractExact (int x,...

1 minute read.

Java Float Keyword

Float: In general, there are two categories of data types: primitive data types and non-primitive data types. So, float is the data type which is a primitive data type. Declarating the variables and...

3 minutes read.

Java protected vs private

Java : Java is a pure object oriented language. It was introduced by James Gosling in the year 1995. The first public implementation of java was done by sun micro systems...

3 minutes read.

AbstractSet Class in Java

The AbstractSet class is used for the implementation of the Abstract Collection class and interface. It is the part of Collection Frameworks. In the AbstractSet, the implementation is same as the...

3 minutes read.

Packages in Java

Packages in Java can be defined as an assortment for grouping various classes and interfaces based on their performance. It is a catalog for holding various java files. They provide...

4 minutes read.

Bin Packing Problem Java

Assigning some items with known weights to bins with consistent capacities is necessary for the bin packing problem. The goal is to use the smallest possible boxes while ensuring everything is put...

6 minutes read.