|
|
תריץ,פעולת if שבודקת אם במערך, אחד האברים הוא key (טיפ: תשתמש במתודה indexOf)
ואז זה בודק אם key נמצא במערך, אם לא זה יחזיר (return) את המספר -1.
אם כן, אז זה יבדוק איזה ערך זה במערך.
אני לא בטח שאני יודע מה זה המתוודה הזאת indexOf) . ( ולפי מה שאני זוכר זה מתוודה שבודקת כמה פעמיים נגיד נמצא אות מסויימת במילה .מסויימת, ואין לזה קשר למספרים לפי מה שאני זוכר תקן אותי אם אני טועה )
בכול אופן זה לא נכון להשתמש ככה בשאלה , כי הוא מבקש אלגוריתים ספציפי. שמחלק את המערך לחלקים נגיד הגדול הוא 12 אז לחלק את זה לשלשיות ואז ברגע שמצאת באיזה שלשיה הוא נמצא לחלק את השלישיה הספציפית הזאת לאחדות עד מציאת האיבר .
ואם לא נון גודל המערך אז לכמה מחלקים אותו? אני חשבתי לחלק אותם תמיד לחציים ולבדוק באיזה חצי הוא נמצא .
אבל אם המערך איזה זוגי אז החילוק לא יעבוד .. אני צריך שיטה לחלק מערך אי זוגי
אולי מה שהצעת יפתור את הבעיה אבל לא בדרך שהתבקשתי לפתור .
אשמח אם תוכל לנסות לעזור שוב ..
נערך לאחרונה על ידי Par4n0iA; 24-12-2012 בשעה 21:34.
אתה מחלק את,המערך לשלושה חלקים בעזרת המתודה split.
לאחר מכן תעשה פעול, בדיקה, אם הערך המקסימלי שווה למספר שרוצים, אפשר לדעת את המספר המקסימלי בעזרת max.
ואז אחרי הפעולת, בדיקה זה. פשוט.
בהצלחה.
זה היה לדוגמה, בכל מקרה הנה הסבר על split:
http://www.java-examples.com/java-string-split-example
לשיטה הזאת (לחלק את המערך לחלקים, לבדוק באיזה חלק נמצא הערך לפי האיבר הראשון והאחרון, אם הוא בינהם, וגם אותו לחלק) קוראים חיפוש בינארי.
תחפש את זה באינטרנט, אתה תמצא את מבנה הפעולה. חיפוש בינארי הוא בעצם פעולה רקורסיבית אבל זה לא בעיה לקחת פעולה רקורסיבית ולהפוך אותה לפעולה שהיא אינה רקורסיבית.
גם אם זה דוגמה, זה דוגמה לא טובה.
כשאתה בונה פעולה, המטרה שלך היא שהפעולה תיהיה בעלת ערך דינאמי (שתוכל להכניס כל ערך שתרצה, לא ערך מוגדר).
אתה צריך לבנות פעולה שתוכל לעבוד עם מערך בגודל X, לא בגודל קבוע מראש ולכן השיטה שלך היא לא נכונה.
נערך לאחרונה על ידי DooDeLzZz; 25-12-2012 בשעה 00:52.
בתגובתכם להודעותיי, אנא מכם, לחצו על הכפתור "ציטוט ההודעה" שנמצא מתחת לשורה זו.
תודה הצלחתי ..קוד:public class binaryarry { public static void main(String[] args) { double[] data= {2,5,9,18,29,38,46,98,154,209}; System.out.println(binarrysearch(data, 34)); } public static double binarrysearch(double[] a ,int x) { double left = 0; double right = a.length - 1; int middle; while (left <= right) { middle = (int) Math.floor((left + right)/2); if (a[middle] > x) right = middle - 1; else if (a[middle] < x) left = middle + 1; else return middle; } return -1; } }
נערך לאחרונה על ידי Par4n0iA; 25-12-2012 בשעה 13:18.
נערך לאחרונה על ידי DooDeLzZz; 25-12-2012 בשעה 17:43.
בתגובתכם להודעותיי, אנא מכם, לחצו על הכפתור "ציטוט ההודעה" שנמצא מתחת לשורה זו.
שמח שהסתדרת
ננעל.