ئادەتتە چوڭدىن كىچىككە تەرتىپلەنگەن مىقدارلار زەنجىرى (数组) دىن مەلۇم مىقدارنى ئىزدەپ تېپىش ئۇسسۇللىرى ھەرخىل. ئەمما ئىزدەش سۈرئىتى ۋە ئۈنۈمىنى كۆزدە تۇتقاندا ئىككى بۆلۈنمىلىك ئىزدەش ئۇسسۇلى ئەڭ مۇۋاپىق بولىدۇ. يەنى، مىقدارلار زەنجىرىنىڭ ئوتتۇرىدىكى ئېلمىنىتتىن باشلاپ ئىزدەيمىز. ئەگەر بۇ ئېلمىنىت بىز ئىزدىمەكچى بولغان ئېلمىنىتتىن كېچىك بولسا، مىقدارلار چوڭدىن - كېچىككە تىزىلغان بولغاچقا، سول تەرىپىدىكى بارلىق ئېلمىنىتلار چوقۇم ئوتتۇرىدىكى بۇ ئېلمىنتتىن كېچىك بولىدۇ، دېمەك، سول تەرىپىدىكى ئېلمىنىتلار ئىچىدىن ئىزدەشىڭ ھاجىتى يوق. ئېككىنچى قەدەمدە ئوڭ تەرىپىدىكى ئېلمىنىتلارنىڭ ئوتتۇرىسىدىكى ئېلمىنىتنى ئېلىپ، ئىزدىمەكچى بولغان ئېلمىنىت بىلەن سىلىشتۇرىمىز، ئاندىن ئالدىنقى قەدەمنى تەكرارلايمىز. تاكى ئىزدىمەكچى بولغان ئېلمىنتنى تاپقۇچە. يۇقىرىقىلارنى ئەمەلگە ئاشۇرۇشنىڭ Java كودى تۆۋەندىكىدەك:
public class main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] a={13,18,24,35,47,50,62,83,90,115,134}; System.out.println(binarySearch(a,115)); } public static int binarySearch(int[] a, int key) { if(a.length==0) return -1; int first=0; int n=0; int last=a.length-1; int mid; while(first<=last) { mid=(first+last)/2; n++; if(a[mid]==key) { //String s=String.format("Izdesh Qetimi:", n); System.out.print("izdesh Qetim sani:"); System.out.println(n); System.out.print("Izdelgen miqdar index nomuri:"); return mid; } if(a[mid]>key) last=mid-1; if(a[mid]ئىجرا نەچىجىسى تۆۋەندىكىدەك:
izdesh Qetim sani:3 Izdelgen miqdar index nomuri:9يەنى پەقەت 3 قېتىم ئىزدەپلا مىقدارلار گۇرۇپپىسىدىن 115 تىن ئىبارەت ئېلىنىتنى تاپتى.
يۇقىرىقى لوگىكىنىڭ C# تا ئەمەلگە ئاشۇرۇلىشى تۆۋەندىكىدەك:static void Main(string[] args) { int[] a = { 12,34,56,76,89,90,110}; int key = 110; int index = DichotomySearch(a, key); for (int i = 0; i < a.Length - 1; i++) { Console.Write("[{0}]={1, -4}", i, a[i]); } Console.WriteLine(); Console.WriteLine("izdeydighan elment: {0}, orun nomuri: {1}", key, index); Console.Read(); } public static int DichotomySearch(int[] a, int key) { if (a.Length == 0) return -1; int first = 0; int last = a.Length - 1; int middle = 0; int n = 0; if (last < first) { return -1; } while (first <= last) { middle = (first + last) / 2; n++; if (a[middle] == key) { return middle; } if (a[middle] > key) { return last = middle - 1; } if (a[middle] < key) { return last = middle + 1; } } return -1; }ئىجرا نەتىجىسى تۆۋەندىكدەك:
[0]=12 [1]=34 [2]=56 [3]=76 [4]=89 [5]=90 izdeydighan elment:110, orun nomuri:4
كود يۇرىمايدۇيا؟ ياكى قىستۇرمىنى ئېلىۋەتتىڭلىمۇ؟
قىستۇرمېنى ئېلىۋەتكەنتىم