כיצד ליישם QuickSort בג'אווה?



מאמר זה יציג בפניכם אלגוריתם מיון נוסף של Divide And Conquer, שהוא QuickSort ב- Java ויעקוב אחריו באמצעות הדגמה.

QuickSort הוא אלגוריתם חלוקה וכיבוש. בפרדיגמה של עיצוב אלגוריתם Divide & Conquer, אנו מחלקים את הבעיות בתת-בעיות רקורסיבית ואז פותרים את בעיות המשנה ולבסוף משלבים את הפתרונות למציאת התוצאה הסופית. במאמר זה נתמקד ב- QuickSort In

המצביעים הבאים יוסקרו במאמר זה,





בואו נתחיל!

מהו פרמטר בתמונה

דבר אחד שיש לזכור בעת חלוקת הבעיות לבעיות משנה הוא שמבנה בעיות המשנה אינו משתנה מבחינת הבעיה המקורית.
אלגוריתם Divide & Conquer כולל שלושה שלבים:



  • לחלק: לפרק את הבעיה לבעיות משנה
  • לכבוש: פתרון רקורסיבי של בעיות המשנה
  • שילוב: שילוב הפתרונות לקבלת התוצאה הסופית

תמונה- מיון מהיר בג

ישנם אלגוריתמים שונים המבוססים על פרדיגמת חלוקה וכיבוש. מיון מהיר ומיון מיזוג הם ביניהם.

למרות שמורכבות הזמן הגרועה ביותר של QuickSort היא O (n2) שהיא יותר מאלגוריתמי מיון רבים אחרים כמו Merge Sort ו- Heap Sort, QuickSort מהיר יותר בפועל מכיוון שניתן ליישם ביעילות את הלולאה הפנימית שלה ברוב הארכיטקטורות. נתונים מהעולם האמיתי.



בואו נדבר על הטמעת אלגוריתם מיון מהיר. אלגוריתמי Quicksort לוקחים אלמנט ציר ומחלקים את המערך סביב elememt הציר. ישנן מספר וריאציות של Quicksot אשר תלוי באופן בחירת אלמנט הציר. ישנן מספר דרכים לבחור את אלמנט הציר:

  • בחירת האלמנט הראשון
  • בחר את האלמנט האחרון
  • בחירת אלמנט אקראי
  • בחירת אלמנט חציוני

הדבר החשוב הבא שיש להבין הוא, פונקציית partition () באלגוריתם מיון מהיר. פונקציית מחיצה לקחת אלמנט ציר, מציבה אותו במיקום הנכון, מעבירה את כל האלמנטים קטנים יותר מאלמנט הציר משמאלו וכל האלמנטים גדולים יותר מימינו. ל Quicksort לוקח זמן ליניארי לעשות זאת.
ואז המערך מחולק לשני חלקים מאלמנט הציר (כלומר אלמנטים פחות מציר ואלמנטים גדולים מציר) ושני המערכים ממוינים באופן רקורסיבי באמצעות אלגוריתם Quicksort.

פונקציה מפוצלת בדוגמה של Java

כעת, לאחר שהבנו את פעולתו של אלגוריתם QuickSort. בואו להבין כיצד ניתן להטמיע אלגוריתם Quicksort בג'אווה.

QuickSort פוּנקצִיָה:

/ * פונקציית Quicksort צריכה למיין את המערך עם האינדקס הנמוך והגבוה ביותר * /

void sort (int arr [], int lowIndex, int highIndex) {// עד lowIndex = highIndex if (lowIndex

עכשיו בואו נסתכל על קוד החלוקה כדי להבין איך זה עובד.

חֲלוּקָה קוד

בקוד המחיצה נבחר את האלמנט האחרון כאלמנט הציר. אנו חוצים את המערך השלם (כלומר משתמשים במשתנה j במקרה שלנו). אנו עוקבים אחר האלמנט הקטן ביותר במערך (כלומר באמצעות משתנה i במקרה שלנו). אם אנו מוצאים אלמנט קטן יותר מהציר, אנו מעבירים אלמנט זרם החלפה a [j] עם arr [i], אחרת אנו ממשיכים לעבור.

מחיצה int (int arr [], int lowIndex, int highIndex) {// ביצוע האלמנט האחרון כ- pivot int pivot = arr [highIndex] // באמצעות i כדי לעקוב אחר אלמנטים קטנים יותר מ- pivot int i = (lowIndex-1) עבור (int j = lowIndex j

כעת לאחר שהבנתם את פונקציית Quicksort & מחיצה, תנו לנו להסתכל במהירות על הקוד השלם

QuickSort קוד Java

מחלקה QuickSort {// מחיצת שיטת מחיצה (int arr [], int lowIndex, int highIndex) {int pivot = arr [highIndex] int i = (lowIndex-1) עבור (int j = lowIndex j

// שיטת מיון

void sort (int arr [], int lowIndex, int highIndex) {if (lowIndex

// שיטה להדפסת מערך

ריק ריק סטטי Array (int arr []) {int n = arrl אורך עבור (int i = 0 i

// שיטה עיקרית

ריק סטטי ציבורי ראשי (טענות מחרוזת []) {int arr [] = {101, 37, 68, 29, 11, 5} int n = arrllength QuickSort ob = QuickSort חדש () ob.sort (arr, 0, n-1) System.out.println ('מערך ממוין') printArray (arr)}}

תְפוּקָה:

בינארי לעשרוני בג'אווה

פלט- מיון מהיר בג

כעת לאחר ביצוע תוכנית ה- Java הנ'ל היית מבין כיצד QuickSort עובד וכיצד ליישם אותו ב- Java.לפיכך הגענו לסוף מאמר זה בנושא 'Quicksort in Java'. אם ברצונך ללמוד עוד,לבדוק את מאת אדוריקה, חברת למידה מקוונת אמינה. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה נועד להכשיר אתכם למושגי הליבה והמתקדמים של Java יחד עם מסגרות Java שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת במדור התגובות בבלוג זה ונחזור אליך בהקדם האפשרי.