מבוא למדעי המחשב הרצאה :6מיונים 1 הדפסת מערך !לא ניתן להשתמש ב הדפסה ישירה public static void printArray(int[] arr) { for (int i=0; i<arr.length; i=i+1) System.out.print("["+arr[i]+"]"); System.out.println(); // new line } 2 מיון בחירה: אלגוריתם מיון :selection .1קבל מערך (באורך )n .2לולאה i = 0עד :n-2 .1 .2 3 בחר את האינדקס ) (minIndשל האיבר הקטן ביותר בתחום ][i,n-1 החלף את האיבר ה iעם האיבר minInd :)מיון בחירה (קוד public static void main(String[] args) { int len = 10; int[] arr = new int[len]; for(int i=0 ; i<len ; i=i+1) arr[i] = (int)(Math.random()*101); printArray(arr); // prints the array nicely selectionSort(arr); printArray(arr); // prints the (sorted) array } 4 :)מיון בחירה (קוד public static void selectionSort(int[] arr) { for(int i=0; i<arr.length-1; i=i+1) { int minInd = minIndex(arr, i); swap(arr, i, minInd); } :טענה נשמרת } [i..arr.length-1] [ ממוינת וגם כל האיברים בקבוצה0..i-1] קבוצת האיברים :תנאי קדם arr.length>0 ,i = 0 i≤arr.length-1 [ וגם0..i-1] גדולים (או שווים) מהאיברים בקבוצה :תנאי בתר המערך ממוין 5 :)מיון בחירה (קוד // finds the minimum entry index starting at index from public static int minIndex(int[] arr, int from) { int ans = from; for(int i =from+1; i<arr.length; i=i+1) if (arr[ans] > arr[i]) ans = i; return ans; } 6 :)מיון בחירה (קוד public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } 7 מיון בחירה :ניתוח זמן ריצה n n-1 n-2 n-3 n(n-1)/2 ~ n2 2 1 8 ! בלתי אפשרי: לשני פרימיטיבייםSWAP public static void swap(int i, int j) { int tmp = i; i = j; j = tmp; } 9 מיון הכנסה קלט :מערך באורך n לולאה i=1עד:n-1 .1 .2 10 הכנס את האיבר ה i -אל המקום המתאים לו בטווח []0..i-1 )מיון הכנסה (קוד public static void insertionSort(int [] arr) :תנאי קדם { i=1 for (int i = 1; i<arr.length; i = i+1) :טענה נשמרת insert(arr, i); [ ממוינת0..i-1] קבוצת האיברים i≤arr.length וגם } :תנאי בתר המערך ממוין 11 :המשך public static void insert(int[] arr, int i) { int value = arr[i]; while (i > 0 && arr[i-1] > value) { arr[i] = arr[i-1]; i = i-1; } arr[i] = value; } 12 מיון הכנסה :ניתוח זמן ריצה המקרה הגרוע ביותר :מערך ממוין בסדר יורד: n 1 2 3 n(n-1)/2 ~ n2 n-1 13 מיון הכנסה :ניתוח זמן ריצה )(n-1 calls to insert up to n-1 items shifted )(per call to insert ~ n2 נהוג לספור השוואות כשמנתחים את זמן הריצה של אלגוריתמי מיון 14 In Situ כשאומרים על אלגוריתם למיון שהוא In Situ (מלטינית) ,הכוונה היא שהאלגוריתם לא נזקק לזיכרון נוסף מעבר למערך אותו הוא ממיין מיון בחירה ומיון הכנסה הם שניהם In Situ 15
© Copyright 2024