برنامه نویسی

آشنایی با الگوریتم QuickSort: Divide and Conquer

در دنیای الگوریتم ها، QuickSort یکی از کارآمدترین و پرکاربردترین است. به دلیل توانایی خود در مرتب‌سازی سریع و کارآمد حجم زیادی از داده‌ها، به لطف استراتژی Divide and Conquer (DC) خود متمایز است. بیایید بررسی کنیم که QuickSort چگونه کار می کند!

QuickSort چیست؟

QuickSort یک الگوریتم مرتب سازی است که از استراتژی Divide and Conquer استفاده می کند. عنصری به نام pivot را انتخاب می کند و لیست را به دو زیرآرایه تقسیم می کند: یکی با عناصر کوچکتر از pivot و دیگری با عناصر بزرگتر. بازگشت به زیرآرایه ها اعمال می شود، تا زمانی که لیست به طور کامل مرتب شود.

انتخاب محور می تواند به روش های مختلفی انجام شود. به عنوان مثال، یک رویکرد ساده انتخاب اولین عنصر در لیست است. با این حال، این یک قانون نیست و بسته به مورد می توان انتخاب های دیگری نیز انجام داد.

توضیحات تصویر

مراحل QuickSort

1. مبنای بازگشت

وقتی لیست دارای 0 یا 1 عنصر باشد، از قبل مرتب شده است و الگوریتم نیازی به انجام کار دیگری ندارد.
جاوا

توضیحات تصویر

// Verifique se a lista tem 0 ou 1 elemento, que já está ordenada
if (integerList.isEmpty() || integerList.size() < 2) {
    return integerList;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. تقسیم فهرست:

مرحله بعدی انتخاب یک محور و تقسیم لیست به دو زیرآرایه است: یکی با عناصر کوچکتر و دیگری با عناصر بزرگتر از محور. کد زیر نشان می دهد که چگونه می توان این کار را انجام داد:

var pivo = integerList.getFirst();
for (int i = 1; i < integerList.size(); i++) {
   if (integerList.get(i) <= pivo) {
      menores.add(integerList.get(i));
   }
   if (integerList.get(i) > pivo) {
      maiores.add(integerList.get(i));
   }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مهم است: توجه داشته باشید که مقایسه از شروع می شود i=1، برای جلوگیری از قرار گرفتن پیوت در زیرآرایه مینور.

3. بازگشت:

در حال حاضر، بازگشت وارد بازی می شود! الگوریتم تابع QuickSort را دوباره برای کوچکترین و بزرگترین زیرآرایه ها فراخوانی می کند و این فرآیند را تا مرتب شدن لیست تکرار می کند. این کد برای ترکیب نتایج است:

توضیحات تصویر

var sorted = new ArrayList<>(quickSort(menores));
sorted.add(pivo);
sorted.addAll(quickSort(maiores));
return sorted;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیچیدگی الگوریتم

QuickSort دارای نماد O (n log n) Big O است که به این معنی است که بسیار کارآمد است، به خصوص زمانی که با الگوریتم‌هایی مانند مرتب‌سازی حباب‌ها که O(n²) دارند مقایسه می‌شود.
استفاده کنید: این توضیح از فصل 4 کتاب درک الگوریتم ها نوشته آدیتیا بهارگاوا اقتباس شده است. تاکید می کنم که ممکن است ایراداتی وجود داشته باشد، پس همیشه خوب است مطالب را مرور کنید!

نتیجه گیری

QuickSort یک الگوریتم قدرتمند است که از بازگشت برای مرتب سازی کارآمد لیست ها استفاده می کند. مزیت اصلی آن زمان اجرای آن است که می تواند در لیست های بزرگ بسیار سریع باشد، به خصوص در مقایسه با سایر الگوریتم های مرتب سازی. اگر می خواهید عمیق تر متوجه شوید، خواندن کتاب درک الگوریتم ها را توصیه می کنم.

آیا تا به حال از QuickSort در پروژه های واقعی استفاده کرده اید؟ در نظرات به اشتراک بگذارید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا