الگوریتم مرتب سازی سریع: راهنمای گام به گام برای مرتب سازی کارآمد

Summarize this content to 400 words in Persian Lang
مرتب سازی سریع یک الگوریتم مرتب سازی است که از رویکرد تقسیم و غلبه استفاده می کند. شبیه ادغام مرتب سازی است، اما پیچیدگی زمانی O(n log n) دارد.
الگوریتم مرتب سازی سریع
🔍 هدف: ساختارهای داده را به ترتیب صعودی مرتب کنید
🔄 اصلاحات جزئی: می توان تنظیماتی را برای مرتب سازی به ترتیب نزولی انجام داد
جریان سخنرانی
📝 توضیح از الگوریتم
💡 شهود پشت هر قدم
📜 کد شبه نوشتن
🧪 اجرا خشک روی کد شبه
🔗 نمایش آنلاین کامپایلر
⏳ بحث در مورد پیچیدگی زمانی و پیچیدگی فضا
درک مرتب سازی سریع
📌 مرحله 1: یک محور (هر عنصر) را انتخاب کنید
📌 مرحله 2: عناصر کوچکتر را در سمت چپ، بزرگترها را در سمت راست قرار دهید
🔄 تکرار کنید تا مرتب شدن
جزئیات پیاده سازی
📏 با استفاده از اشاره گر: low و high
🔄 بازگشت: برای مرتب سازی قسمت های چپ و راست
تحلیل پیچیدگی
⚙️ پیچیدگی زمانی: O(n log n)
📦 پیچیدگی فضا: O(1) (بدون احتساب پشته بازگشتی)
برخی از حقایق در مورد مرتب سازی سریع
یونیکس sort() ابزار از مرتب سازی سریع استفاده می کند.
مرتبسازی سریع یک الگوریتم مرتبسازی در محل است، بنابراین پیچیدگی فضایی آن O(1) است.
مرتب سازی سریع پایدار نیست، به این معنی که ترتیب عناصر برابر را حفظ نمی کند.
انتخاب عنصر محوری
عنصر محوری را می توان به روش های مختلفی انتخاب کرد:
عنصر اول
آخرین عنصر
عنصر میانی
عنصر تصادفی
صرف نظر از انتخاب، محور همیشه در موقعیت صحیح در آرایه مرتب شده قرار می گیرد.
شهود
یک عنصر محوری را انتخاب کنید و آن را در موقعیت صحیح خود در آرایه مرتب شده قرار دهید.
عناصر کوچکتر را در سمت چپ و عناصر بزرگتر را در سمت راست قرار دهید.
این روند را تکرار کنید تا آرایه مرتب شود.
اجرای خشک
رویکرد
برای پیاده سازی Quick Sort، دو تابع ایجاد می کنیم: quickSort() و partition().
quickSort(arr[], low, high)
راه اندازی اولیه: low اشاره گر به اولین شاخص و high اشاره گر به آخرین شاخص آرایه اشاره می کند.
پارتیشن بندی: از partition() تابع برای به دست آوردن شاخصی که پس از مرتب سازی باید در آن محور قرار گیرد. این شاخص که شاخص پارتیشن نامیده می شود، زیرآرایه های مرتب نشده چپ و راست را از هم جدا می کند.
تماس های بازگشتی: پس از قرار دادن pivot در شاخص پارتیشن، به صورت بازگشتی فراخوانی کنید quickSort() برای زیرآرایه های چپ و راست محدوده زیرآرایه سمت چپ خواهد بود [low to partition index – 1] و محدوده زیرآرایه سمت راست خواهد بود [partition index + 1 to high].
کیس پایه: بازگشت تا زمانی ادامه می یابد که محدوده به 1 تبدیل شود.
partition(arr[], low, high)
یک محور را انتخاب کنید (به عنوان مثال، arr[low]).
از اشاره گرها استفاده کنید i (شروع از low) و j (شروع از high). حرکت کنید i به جلو برای یافتن عنصری بزرگتر از محور، و j به عقب برای یافتن عنصری کوچکتر از محور. اطمینان حاصل کنید i and j >= low + 1.
اگر i , swap arr[i] و arr[j].
ادامه دهید تا j .
محور را عوض کنید (arr[low]) با arr[j] و بازگشت j به عنوان شاخص پارتیشن
کد شبه
function quickSort(arr[], low, high) {
if (low >= high) {
return
}
partitionIndex = partition(arr[], low, high)
quickSort(arr[], low, partitionIndex – 1)
quickSort(arr[], partitionIndex + 1, high)
}
function partition(arr[], low, high) {
pivot = arr[low]
i = low
j = high
while (i j) {
while (arr[i] pivot and i high) {
i++
}
while (arr[j] > pivot) {
j–
}
if (i j) {
swap(arr[i], arr[j])
}
}
swap(arr[low], arr[j])
return j
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مراجع و اعتبار
🎓 ویدیوهای عالی Striver's Awesome برای توضیحات و آموزش های دقیق.
🌐 الگوریتم سلام برای مطالب و نمونه های روشنگر.
مرتب سازی سریع یک الگوریتم مرتب سازی است که از رویکرد تقسیم و غلبه استفاده می کند. شبیه ادغام مرتب سازی است، اما پیچیدگی زمانی O(n log n) دارد.
الگوریتم مرتب سازی سریع
- 🔍 هدف: ساختارهای داده را به ترتیب صعودی مرتب کنید
- 🔄 اصلاحات جزئی: می توان تنظیماتی را برای مرتب سازی به ترتیب نزولی انجام داد
جریان سخنرانی
- 📝 توضیح از الگوریتم
- 💡 شهود پشت هر قدم
- 📜 کد شبه نوشتن
- 🧪 اجرا خشک روی کد شبه
- 🔗 نمایش آنلاین کامپایلر
- ⏳ بحث در مورد پیچیدگی زمانی و پیچیدگی فضا
درک مرتب سازی سریع
- 📌 مرحله 1: یک محور (هر عنصر) را انتخاب کنید
- 📌 مرحله 2: عناصر کوچکتر را در سمت چپ، بزرگترها را در سمت راست قرار دهید
- 🔄 تکرار کنید تا مرتب شدن
جزئیات پیاده سازی
- 📏 با استفاده از اشاره گر:
low
وhigh
- 🔄 بازگشت: برای مرتب سازی قسمت های چپ و راست
تحلیل پیچیدگی
- ⚙️ پیچیدگی زمانی: O(n log n)
- 📦 پیچیدگی فضا: O(1) (بدون احتساب پشته بازگشتی)
برخی از حقایق در مورد مرتب سازی سریع
- یونیکس
sort()
ابزار از مرتب سازی سریع استفاده می کند. - مرتبسازی سریع یک الگوریتم مرتبسازی در محل است، بنابراین پیچیدگی فضایی آن O(1) است.
- مرتب سازی سریع پایدار نیست، به این معنی که ترتیب عناصر برابر را حفظ نمی کند.
انتخاب عنصر محوری
- عنصر محوری را می توان به روش های مختلفی انتخاب کرد:
- عنصر اول
- آخرین عنصر
- عنصر میانی
- عنصر تصادفی
- صرف نظر از انتخاب، محور همیشه در موقعیت صحیح در آرایه مرتب شده قرار می گیرد.
شهود
- یک عنصر محوری را انتخاب کنید و آن را در موقعیت صحیح خود در آرایه مرتب شده قرار دهید.
- عناصر کوچکتر را در سمت چپ و عناصر بزرگتر را در سمت راست قرار دهید.
- این روند را تکرار کنید تا آرایه مرتب شود.
اجرای خشک
رویکرد
برای پیاده سازی Quick Sort، دو تابع ایجاد می کنیم: quickSort()
و partition()
.
-
quickSort(arr[], low, high)
-
راه اندازی اولیه:
low
اشاره گر به اولین شاخص وhigh
اشاره گر به آخرین شاخص آرایه اشاره می کند. -
پارتیشن بندی: از
partition()
تابع برای به دست آوردن شاخصی که پس از مرتب سازی باید در آن محور قرار گیرد. این شاخص که شاخص پارتیشن نامیده می شود، زیرآرایه های مرتب نشده چپ و راست را از هم جدا می کند. -
تماس های بازگشتی: پس از قرار دادن pivot در شاخص پارتیشن، به صورت بازگشتی فراخوانی کنید
quickSort()
برای زیرآرایه های چپ و راست محدوده زیرآرایه سمت چپ خواهد بود[low to partition index - 1]
و محدوده زیرآرایه سمت راست خواهد بود[partition index + 1 to high]
. - کیس پایه: بازگشت تا زمانی ادامه می یابد که محدوده به 1 تبدیل شود.
-
راه اندازی اولیه:
-
partition(arr[], low, high)
- یک محور را انتخاب کنید (به عنوان مثال،
arr[low]
). - از اشاره گرها استفاده کنید
i
(شروع ازlow
) وj
(شروع ازhigh
). حرکت کنیدi
به جلو برای یافتن عنصری بزرگتر از محور، وj
به عقب برای یافتن عنصری کوچکتر از محور. اطمینان حاصل کنیدi and
j >= low + 1
. - اگر
i , swap
arr[i]
وarr[j]
. - ادامه دهید تا
j .
- محور را عوض کنید (
arr[low]
) باarr[j]
و بازگشتj
به عنوان شاخص پارتیشن
- یک محور را انتخاب کنید (به عنوان مثال،
کد شبه
function quickSort(arr[], low, high) {
if (low >= high) {
return
}
partitionIndex = partition(arr[], low, high)
quickSort(arr[], low, partitionIndex - 1)
quickSort(arr[], partitionIndex + 1, high)
}
function partition(arr[], low, high) {
pivot = arr[low]
i = low
j = high
while (i j) {
while (arr[i] pivot and i high) {
i++
}
while (arr[j] > pivot) {
j--
}
if (i j) {
swap(arr[i], arr[j])
}
}
swap(arr[low], arr[j])
return j
}
مراجع و اعتبار
🎓 ویدیوهای عالی Striver's Awesome برای توضیحات و آموزش های دقیق.
🌐 الگوریتم سلام برای مطالب و نمونه های روشنگر.