====== سوال ۳ ====== می‌دانیم مشکل اصلی ‎$Quicksort$‎ در پیدا کردن کلید قسمت ‎Partition‎ است. به‌طوری که اگر کلید عنصر مناسبی باشد دو زیر مسئله ما اندازه‌های برابر (و مساوی ‎$\frac{n}{2}$‎) خواهند داشت و اگر کلید عنصر مناسبی از آب در نیاید، رابطه بازگشتی ما کُند خواهد بود. برای حل این مشکل، علی قسمت انتخاب کلید تابع ‎Parition‎ را (که روی زیرآرایه‌ی‎ $n=r-l+1$ ،‎عنصری ‎$A[l..r]$‎ اجرا می‌شود)، به صورت زیر می‌نویسد. * ابتدا ماکزیمم عناصر آرایه را در ‎${\cal O}(n)$‎ پیدا کن و آن را ‎$M$‎ بنام. * سپس مینیمم عناصر آرایه را در ‎${\cal O}(n)$‎ پیدا کن و آن را ‎$m$‎ بنام. * برای هر عنصر ‎$A_i$‎ از ‎$n$‎ عنصر موجود در آرایه (زیر آرایه)، مقدار ‎$C_i = Max(M-A_i,A_i-m)$‎ را حساب کن. * عنصری که ‎$C_i$‎ آن کم‌تر یا مساوی سایر ‎$C_i$‎ هاست را ‎$q$‎ بنام ‎($\forall_{i=l}^r C_q \le C_i$)‎‎ و $A[q]$ را عنصر کلید برای ‎Partition‎ قرار بده. یعنی ‎$key \leftarrow A[q]$‎. دقت کنید که کل این رویه ‎۵ مرحله‌ای قرارست جایگزین ‎$key \leftarrow A[random(l..r)]$‎ بشود.‎ آیا با این کارِ علی تغییری در بهترین و بدترین زمان اجرای الگوریتم ‎$QuickSort$‎ به‌وجود می‌آید؟ جواب خود را در صورت لزوم با مثال و رابطه‌بازگشتی و یا اثبات بیان کنید. * [[سوال ۴|سوال بعد]] * [[سوال ۲|سوال قبل]]