For working professionals
For fresh graduates
More
6. JDK in Java
7. C++ Vs Java
16. Java If-else
18. Loops in Java
20. For Loop in Java
45. Packages in Java
52. Java Collection
55. Generics In Java
56. Java Interfaces
59. Streams in Java
62. Thread in Java
66. Deadlock in Java
73. Applet in Java
74. Java Swing
75. Java Frameworks
77. JUnit Testing
80. Jar file in Java
81. Java Clean Code
85. Java 8 features
86. String in Java
92. HashMap in Java
97. Enum in Java
100. Hashcode in Java
104. Linked List in Java
108. Array Length in Java
110. Split in java
111. Map In Java
114. HashSet in Java
117. DateFormat in Java
120. Java List Size
121. Java APIs
127. Identifiers in Java
129. Set in Java
131. Try Catch in Java
132. Bubble Sort in Java
134. Queue in Java
141. Jagged Array in Java
143. Java String Format
144. Replace in Java
145. charAt() in Java
146. CompareTo in Java
150. parseInt in Java
152. Abstraction in Java
153. String Input in Java
155. instanceof in Java
156. Math Floor in Java
157. Selection Sort Java
158. int to char in Java
163. Deque in Java
171. Trim in Java
172. RxJava
173. Recursion in Java
174. HashSet Java
176. Square Root in Java
189. Javafx
Sorting is a fundamental operation in computer science, and various algorithms are available to accomplish this task efficiently. One such algorithm is Bubble Sort, a simple yet popular sorting technique.
A comparison-based sorting algorithm known as Bubble Sort continually goes over the list compares nearby components, and, if necessary, swaps out those that are out of order. The list gets sorted completely after this step is finished. The manner that smaller entries "bubble" list gives rise to the algorithm's name. Despite being straightforward, Bubble Sort's quadratic time complexity prevents it from being a good solution for handling huge datasets. It can, however, be helpful for smaller datasets or as a teaching tool to comprehend fundamental sorting ideas.
To understand Bubble Sort better, let's look at its Java implementation. Consider an array of integers that needs to be sorted in ascending order using Bubble Sort:
javaCopy code
public class BubbleSort {
public static void bubbleSort (int[] arr) {
intn = arr.length;
fo r (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tem p = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
bubble Sort(arr);
Syst em.out.println("Sorted array: ");
for (int num : arr) {
System.out.pri nt(num + " ");
}
}
}
The above code demonstrates a basic implementation of Bubble Sort in Java. The bubbleSort method takes an array arr and performs the sorting operation. The nested loops iterate through the array, comparing adjacent elements and swapping them if necessary. The sorted array is then printed using the System.out.println statement.
To comprehend the inward operations of Air Pocket Sort, we should think about a model and imagine it with a bit by bit clarification.
Model: Assume we have a variety of numbers: [5, 3, 8, 4, 2].
We will apply Bubble Sort to sort this array in ascending order.
Step 1: Starting from the beginning, compare the first two elements (5 and 3). As 5 is greater than 3, swap the elements. The array now becomes [3, 5, 8, 4, 2].
Step 2: Move to the next pair of elements (5 and 8). Since they are now properly aligned, trading is required. The array continues as before: [3, 5, 8, 4, 2].
Step 3: Continue comparing and swapping adjacent elements until the array ends. Here, the next pair is (8, 4). Swap them to obtain [3, 5, 4, 8, 2].
Step 4: Repeat the process for the remaining elements. The next pair is (8, 2), and swapping them gives [3, 5, 4, 2, 8].
Step 5: After completing one pass through the array, the largest element (8) is in its correct position at the end. Now, repeat the process for the remaining unsorted elements. The array becomes [3, 5, 4, 2, 8].
Step 6: The array is [3, 4, 2, 5, 8] after the second pass.
Step 7: The array is [3, 2, 4, 5, 8] after the third pass.
Step 8: The array is [2, 3, 4, 5, 8] after the fourth pass.
Step 9: As of now, the array is [2, 3, 4, 5, 8] following the fifth pass. At the present moment, the array is organized into rising requests.
Although the basic implementation of Bubble Sort is straightforward, it can be optimized to improve its performance. The optimization involves introducing a flag to check if any swapping occurs during a pass. If no swapping occurs, it indicates that the array is already sorted, and the algorithm can terminate early.
Here's an optimized version of Bubble Sort in Java:
javaCopy code
public static void bubbleSortOptimized(int[] arr) {
int n = arr.length;
boolean swapped;
for (int i = 0; i < n - 1; i ) {
swapped = false;
for (int j = 0; j < n - i - 1; j ) {
if (arr[j] > arr[j 1]) {
int temp = arr[j];
arr[j] = arr[j 1];
arr[j 1] = temp;
swapped = true;
}
}
if (!swapped) {
break;
}
}
}
In this optimized implementation, we introduce a swapped variable that keeps track of whether any swapping occurred during a pass. If no swapping occurs, the swapped variable remains false, and the algorithm breaks out of the loop, terminating early.
The worst case scenario for Bubble Sort is when the input array is in descending order. A worldly intricacy of O(n2) results from the need to contrast and trade every component and each and every component in this present circumstance, where n is the all-out number of things in the array.
Example: Consider an array [9, 8, 7, 6, 5]. Applying Bubble Sort to this array results in the following comparisons and swaps:
Pass 1: Comparisons: 4 Swaps: 4
Pass 2: Comparisons: 3 Swaps: 3
Pass 3: Comparisons: 2 Swaps: 2
Pass 4: Comparisons: 1 Swaps: 1
The total number of comparisons and swaps is given by the formula (n-1) (n-2) ... 1, which simplifies to n(n-1)/2. For an array of length 5, this results in 10 comparisons and swaps. As the array grows larger, the number of operations increases quadratically.
Bubble Sort can also be implemented using recursion. In the recursive approach, the largest element "bubbles" to the end of the array in each pass, similar to the iterative version.
Here's a recursive implementation of Bubble Sort in Java:
javaCopy code
public static void bubbleSortRecursive(int[] arr, int n) {
if (n == 1) {
return;
}
for (int i = 0; i < n - 1; i ) {
if (arr[i] > arr[i 1]) {
int temp = arr[i];
arr[i] = arr[i 1];
arr[i 1] = temp;
}
}
bubbleSortRecursive(arr, n - 1);
}
The recursive implementation takes an additional parameter, n, which represents the length of the array. The base case occurs when n becomes 1, indicating that the array is sorted. Otherwise, the algorithm performs one pass through the array, swapping adjacent elements if necessary, and recursively calls itself with n - 1.
The boundary case for Bubble Sort is when the array is already sorted. In this scenario, Bubble Sort arrays its best-case behavior, as no swapping is required during any pass. With an O(n) time complexity, where n is the number of items in the array, the algorithm will run through the array once to ensure that no swapping is required and end early.
Consider the following array: [1, 2, 3, 4, 5].
Applying Bubble Sort to this array results in the following comparisons and swaps:
Pass 1: Comparisons: 4 Swaps: 0
Pass 2: Comparisons: 3 Swaps: 0
Pass 3: Comparisons: 2 Swaps: 0
Pass 4: Comparisons: 1 Swaps: 0
The algorithm completes in a single pass, as no swapping is required, and the array is already sorted.
Yes, Bubble Sort is an in-place sorting algorithm, meaning it does not require additional memory to perform the sorting operation. The sorting is done directly on the input array, with no need for auxiliary data structures.
In the Java implementation of Bubble Sort we discussed earlier, the sorting is performed directly on the input array arr. No additional arrays or data structures are used during the sorting process.
Yes, Bubble Sort is a stable sorting algorithm. Stability refers to the ability of an algorithm to maintain the relative order of elements with equal values. In Bubble Sort, when two adjacent elements are swapped, they only change places if they are in the wrong order. Two items that share the same value will not be switched, preserving the original order.
Think of an array of items with a key-value pair as an illustration. While maintaining the relative order of items with the same key, Bubble Sort will sort the objects depending on the key.
Where is the Bubble Sort algorithm used?
Bub ble Sort, due to its simplicity, is rarely used in practice for large datasets. It can by the by being valuable in certain conditions, for example,
Bubble Sort is regularly utilized as a training instrument to represent arranging calculations as a result of how basic and clear its rationale is.
Small Datasets: Bubble Sort can be useful for sorting small datasets where efficiency is not a primary concern. Its simple implementation and in-place nature make it suitable for such scenarios.
Partially Sorted Arrays: When dealing with partially sorted arrays, Bubble Sort can have advantages over other sorting algorithms. It performs well when the array is already partially sorted or nearly sorted, as it requires fewer comparisons and swaps in such cases.
Simple implementation: Bubble Sort has a straightforward implementation, making it easy to understand and implement, especially for beginners.
In-place sorting: Bubble Sort operates directly on the input array without requiring additional memory, making it memory-efficient.
Stable sorting: Bubble Sort preserves the relative order of elements with equal values, making it a stable sorting algorithm.
Inefficient for large datasets: Bubble Sort has a time complexity of O(n^2), making it inefficient for sorting large arrays. Other sorting algorithms, such as Quick Sort or Merge Sort, offer better performance for larger datasets.
Lack of adaptability: Bubble Sort's performance does not improve based on the initial state of the array. It always performs a fixed number of passes, regardless of whether the array is already sorted or partially sorted.
In conclusion, Bubble Sort is a simple yet inefficient sorting algorithm that operates by repeatedly comparing adjacent elements and swapping them if necessary. While it has limited practical use for large datasets, it can be useful for smaller arrays or educational purposes. Understanding Bubble Sort provides a foundation for learning more advanced sorting algorithms and their optimizations.
Q1: Can Bubble Sort be used to sort strings or other data types?
A1: Yes, Bubble Sort can be used to sort strings or other data types as long as the comparison operation is defined for the data type being sorted.
Q2: How does Bubble Sort compare to other sorting algorithms?
A2: Bubble Sort has a time complexity of O(n^2), which makes it less efficient than other sorting algorithms like Quick Sort or Merge Sort. These algorithms have better average and worst-case time complexity, making them more suitable for sorting large datasets.
Q3: Can Bubble Sort be used for sorting linked lists?
A3: Bub ble Sort can be used to sort linked lists by repeatedly traversing the list and swapping adjacent nodes if necessary. However, due to the frequent swapping of nodes, Bubble Sort is not an efficient choice for sorting linked lists compared to other algorithms like Merge Sort or Insertion Sort.
Q4: Are there any real-world applications where Bubble Sort is preferred?
A4: Bubble Sort is not commonly used in real-world applications due to its inefficiency for large datasets. However, it can still be used for small datasets or scenarios where simplicity and ease of implementation outweigh the performance concerns.
Take the Free Quiz on Java
Answer quick questions and assess your Java knowledge
Author
Talk to our experts. We are available 7 days a week, 9 AM to 12 AM (midnight)
Indian Nationals
1800 210 2020
Foreign Nationals
+918045604032
1.The above statistics depend on various factors and individual results may vary. Past performance is no guarantee of future results.
2.The student assumes full responsibility for all expenses associated with visas, travel, & related costs. upGrad does not provide any a.