מצגת של PowerPoint - המחלקה למדעי המחשב

‫מבוא למדעי המחשב‬
‫הרצאה ‪ :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‬‬