QUICKSORT(A, lo, hi):
if lo < hi:
r = RANDOM(lo, hi) # <-- sirf yahi naya line hai
swap A[r] with A[hi] # random pivot ko end pe move karo
p = PARTITION(A, lo, hi) # Lomuto/Hoare around A[hi]
QUICKSORT(A, lo, p-1)
QUICKSORT(A, p+1, hi)
Quicksort ka asli kaam comparisons mein hota hai jo partitioning ke dauran hoti hain. Toh agar hum expected comparisons ko bound kar lein, toh runtime bound ho jaata hai.
Yeh step kyun?Zij ke har element ka same chance hai pehle pivot pick hone ka — yahi uniform randomization ka poora fayda hai. j−i+1 mein se do favorable choices → probability 2/(j−i+1).
Randomization quicksort ki complexity mein kya change karta hai?
Worst case O(n2) rehta hai lekin expected time har input ke liye O(nlogn) ho jaata hai; koi bhi input adversarially bura nahi hota.
Quicksort mein do elements zi,zj kab compare hote hain?
Tab jab unme se ek pivot choose hota hai jabki dono abhi bhi same subarray mein hain — zyada se zyada ek baar.
Pr[zi and zj are compared] kya hai?
j−i+12, kyunki unke beech ke j−i+1 elements mein se (inclusive) pehla pivot zi ya zj hona chahiye.
Indicator Xij 0 ya 1 hi kyun hota hai?
Ek pair zyada se zyada ek baar compare hota hai kyunki involved pivot future recursion se remove ho jaata hai; opposite-side elements kabhi compare nahi hote.
Do adjacent (sorted order mein) elements ke compare hone ki probability?
22=1 — adjacent elements hamesha compare hote hain.
Kya start mein ek random shuffle random pivots jitna hi kaam karta hai?
Haan — dono pivot ranks ko uniformly random banate hain, same expected O(nlogn) dete hain.
Recall Feynman: ek 12-saal ke bachche ko samjhao
Socho tum cards ki ek deck sort kar rahe ho ek card pick karke ("splitter"), phir chhote cards left mein aur bade cards right mein rakhke, aur har pile par repeat karte ho. Agar tum hamesha sabse chhota card splitter pick karo, toh piles ek taraf jhuk jaati hain (1 vs baaki sab) aur bahut time lagta hai. Trick yeh hai: har baar splitter card randomly pick karo. Ab koi sneaky tarika nahi hai ki koi deck arrange kare tumhe slow karne ke liye — kyunki woh guess nahi kar sakte tum kaun sa card utha loge. Average par tumhari piles nicely half-half split ho jaati hain, toh tum n2 ke bajaye lagbhag nlogn steps mein finish karte ho. Do cards directly tab compare hote hain jab unme se ek splitter hota hai jabki woh abhi bhi same pile mein hain — aur yahi woh neat fraction 2/(gap+1) deta hai.