YE KAISE CHALTA HAI: har position i ke liye 0 se n−2 tak, baaki scan karo minimum dhundhne ke liye.
Pass i=0: n−1 elements se compare karo.
Pass i=1: n−2 elements se compare karo.
… last pass tak: 1 comparison.
Total comparisons:
C=(n−1)+(n−2)+⋯+1=∑k=1n−1k=2(n−1)n
Ye sum kyun? Gauss trick: pehle aur aakhri term ko pair karo (n−1)+1=n, doosra aur doosra-aakhri (n−2)+2=n… aisi 2n−1 pairs hain jo har ek n tak jodi jaati hain, jisse 2n(n−1) milta hai.
Kyunki scan kabhi jaldi nahi rukti, C=2n(n−1)=O(n2)best, worst, aur average teeno cases mein. Swaps, lekin, zyada se zyada n−1 hain (ek per pass) — selection sort writes kam karta hai.
KAISE: array mein baar baar pass karo adjacent inversions ko swap karte hue. Pass k ke baad, sabse bade k elements end mein lock ho jaate hain.
Worst case (reverse-sorted): pass k mein n−k comparisons hote hain:
C=∑k=1n−1(n−k)=2n(n−1)=O(n2)
"Kya maine swap kiya?" flag ke saath, best case (pehle se sorted) = ==ek pass, n−1 comparisons, O(n)== — lekin worst case mein bahut saare swaps karta hai (O(n2)).
KAISE: sorted prefix A[0..i-1] rakho. A[i] lo, bade elements ko right shift karo, use drop karo.
Best case (pehle se sorted): har naya element apne left neighbour se ≥ hai, toh inner loop turant ruk jaata hai → 1 comparison per element → n−1 comparisons → ==O(n)==.
Worst case (reverse-sorted): element i apne saare i predecessors ko cross karta hai:
C=∑i=1n−1i=2n(n−1)=O(n2)
Moves ki sankhya array mein inversions ki sankhya ke barabar hoti hai — yahi woh gehri wajah hai ki insertion sort nearly-sorted data par itna fast hai.
Socho ki tum playing cards ko haath mein sort kar rahe ho.
Insertion: tum cards ek ek karke uthate ho aur har ek ko sahi jagah slide karte ho un cards ke beech jo tum pehle se pakde ho. Agar wo almost order mein the, toh tum muskil se kuch move karte ho — super quick!
Selection: tum table par saare cards dekhte ho, sabse chhota dhundhte ho, rakhte ho, phir baaki sabko phir se dekhte ho, agla sabse chhota dhundhte ho… Tum hamesha sab kuch dekhte ho, chahe wo pehle se sorted hi kyun na hon.
Bubble: tum kisi bhi do neighbours ko jo galat order mein hain swap karte rehte ho, left se right sweep karte hue, jab tak kuch swap karne ki zaroorat na ho. Bade cards dheere dheere end par "float" karte hain.
Trick: insertion sort ek achhe tarike se lazy hai — jab card pehle se sahi jagah par ho tab wo usi waqt ruk jaata hai. Isliye ye jeet jaata hai jab cheezein almost tidy hoti hain.
#flashcards/coding
Why is selection sort always Θ(n2) even on a sorted array?
Iska inner scan minimum dhundhne ke liye kabhi jaldi nahi rukta — ye hamesha 2n(n−1) comparisons karta hai chahe input ka order kuch bhi ho.
What is the best-case time of insertion sort and when does it occur?
O(n), jab array pehle se (almost) sorted ho — har element sirf apne left neighbour ko check karta hai aur ruk jaata hai.
Insertion sort's number of moves equals what quantity?
Array mein inversions ki sankhya (out-of-order pairs).
Which two of the three sorts are naturally stable?
Bubble aur insertion (ye adjacent elements shift karte hain); selection by default stable nahi hai.
Which sort minimises the number of writes/swaps, and why might that matter?