Bubble Sort
Bubble sort क्या है
Bubble sort सबसे सरल sorting algorithms में से एक है। यह बार-बार बगल के items तुलना करता है और गलत क्रम में हों तो swap करता है। हर pass के साथ, सबसे बड़ी बची value अंत की ओर तैरती है — bubble उठने जैसा। यह बड़ी lists को धीमा है पर sorting कैसे काम करती है सीखने को बढ़िया।
विचार
{5, 2, 8, 1, 9} लीजिए। एक pass में, हम 5 और 2 (swap), 5 और 8 (नहीं), 8 और 1 (swap), 8 और 9 (नहीं) तुलना करते हैं। सबसे बड़ा number अंत में चला जाता है। हम छोटे होते आगे वाले हिस्से पर दोहराते हैं जब तक सब sort न हो।
Java program
public class BubbleSort {
public static void main(String[] args) {
int[] a = {5, 2, 8, 1, 9};
int n = a.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int t = a[j]; // swap
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (int x : a) System.out.print(x + " ");
}
}
बाहरी loop passes चलाता है; अंदरूनी loop पड़ोसी तुलना करके swap करता है। n - 1 - i range छोटी करता है क्योंकि हर pass के बाद अंत पहले से sorted होता है।
Dry run
| Compare | Pair | Swap? | Array ab |
|---|---|---|---|
| a[0],a[1] | 5,2 | haan | 2,5,8,1,9 |
| a[1],a[2] | 5,8 | nahi | 2,5,8,1,9 |
| a[2],a[3] | 8,1 | haan | 2,5,1,8,9 |
| a[3],a[4] | 8,9 | nahi | 2,5,1,8,9 |
| Pehla pass poora — 9 end me. Agle passes ke baad: 1,2,5,8,9 | |||
हर pass बाएँ से दाएँ पड़ोसी तुलना करता है और बड़े को आगे swap करता है, तो सबसे बड़ी value अंत में पहुँचती है। फिर अगला pass बाक़ी sort करता है।
इसे optimise करना
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
swapped = true;
}
}
if (!swapped) break; // पहले से sorted, जल्दी रुको
}
swapped flag हमें जल्दी रुकने देता है: अगर पूरे pass में कोई swap न हो, array पहले से sorted है, तो जारी रखने का कोई मतलब नहीं।
Time complexity
- Worst/average: O(n²) — data पर nested loops।
- Best (optimised, sorted input): O(n) — एक साफ़ pass।
- Space: O(1) — जगह पर sort, कोई अतिरिक्त array नहीं।
O(n²) के कारण, bubble sort सीखने और छोटी lists को ठीक है, पर बड़े data को धीमा।
आम गलतियाँ
- गलत inner loop सीमा।
n - 1 - iइस्तेमाल कीजिए, वरना sorted अंत से आगे तुलना करते हैं। - ख़राब swap। सही swap को temp variable इस्तेमाल कीजिए।
- Ascending को
<से तुलना। बड़ी values दाएँ धकेलने को>इस्तेमाल कीजिए। - बड़े data को इस्तेमाल करना। तेज़ sorts या
Arrays.sortबेहतर।
सारांश
- Bubble sort list sort होने तक बगल के items swap करता है।
- हर pass सबसे बड़ी बची value अंत में धकेलता है।
- Nested loops इस्तेमाल कीजिए, inner range
n - 1 - i। - Swapped flag sorted data पर जल्दी रुकने देता है।
- यह O(n²) है — सीखने को बढ़िया, बड़ी lists को धीमा।
आगे, sorted data पर तेज़ खोज आज़माइए binary search से, या दोहराइए Java arrays।
