הרעיון
חיפוש לינארי עובר על כל איבר במערך מההתחלה לסוף. אם מצאנו את הערך המבוקש – מחזירים את האינדקס (או true). אם הגענו לסוף בלי למצוא – הערך לא קיים.
חיפוש הערך 7: בודקים 8, 3, 15 ואז מוצאים 7 באינדקס 3.
גרסה 1: החזרת אינדקס
public static int linearSearch(int[] arr, int key) { for (int i = 0; i < arr.length; i++) { if (arr[i] == key) return i; } return -1; // לא נמצא }
גרסה 2: החזרת boolean
public static boolean contains(int[] arr, int key) { for (int i = 0; i < arr.length; i++) { if (arr[i] == key) return true; } return false; }
חיפוש במערך של עצמים
public static Student findByName(Student[] arr, String name) { for (int i = 0; i < arr.length; i++) { if (arr[i].getName().equals(name)) return arr[i]; } return null; }
שימו לב: להשוואת מחרוזות משתמשים ב-equals ולא ב-==.
חיפוש ההופעה האחרונה
public static int lastIndexOf(int[] arr, int key) { for (int i = arr.length - 1; i >= 0; i--) { if (arr[i] == key) return i; } return -1; }
סיבוכיות
| מקרה | סיבוכיות זמן | הסבר |
|---|---|---|
| מקרה טוב | O(1) | הערך נמצא במקום הראשון |
| מקרה ממוצע | O(n/2) = O(n) | בממוצע נבדוק חצי מהמערך |
| מקרה גרוע | O(n) | הערך בסוף או לא קיים |
שאלות נפוצות
למה מחזירים -1 כשלא מוצאים?
כי -1 הוא אינדקס לא חוקי (אינדקסים מתחילים מ-0). זה סימן מוסכם שהערך לא נמצא.
חיפוש לינארי עובד רק על מערכים ממוינים?
לא! חיפוש לינארי עובד על כל מערך – ממוין או לא. זה אחד היתרונות שלו. חיפוש בינארי, לעומתו, דורש מערך ממוין.
מתי עדיף חיפוש בינארי?
כשהמערך ממוין. חיפוש בינארי הוא O(log n) – הרבה יותר מהיר עבור מערכים גדולים.