Home >  > Java دا ئىككى بۆلۈنمىلىك ئىزدەش لوگىكىسى

Java دا ئىككى بۆلۈنمىلىك ئىزدەش لوگىكىسى

3

ئادەتتە چوڭدىن كىچىككە تەرتىپلەنگەن مىقدارلار زەنجىرى (数组) دىن مەلۇم مىقدارنى ئىزدەپ تېپىش ئۇسسۇللىرى ھەرخىل. ئەمما ئىزدەش سۈرئىتى ۋە ئۈنۈمىنى كۆزدە تۇتقاندا ئىككى بۆلۈنمىلىك ئىزدەش ئۇسسۇلى ئەڭ مۇۋاپىق بولىدۇ. يەنى، مىقدارلار زەنجىرىنىڭ ئوتتۇرىدىكى ئېلمىنىتتىن باشلاپ ئىزدەيمىز. ئەگەر بۇ ئېلمىنىت بىز ئىزدىمەكچى بولغان ئېلمىنىتتىن كېچىك بولسا، مىقدارلار چوڭدىن - كېچىككە تىزىلغان بولغاچقا، سول تەرىپىدىكى بارلىق ئېلمىنىتلار چوقۇم ئوتتۇرىدىكى بۇ ئېلمىنتتىن كېچىك بولىدۇ، دېمەك، سول تەرىپىدىكى ئېلمىنىتلار ئىچىدىن ئىزدەشىڭ ھاجىتى يوق. ئېككىنچى قەدەمدە ئوڭ تەرىپىدىكى ئېلمىنىتلارنىڭ ئوتتۇرىسىدىكى ئېلمىنىتنى ئېلىپ، ئىزدىمەكچى بولغان ئېلمىنىت بىلەن سىلىشتۇرىمىز، ئاندىن ئالدىنقى قەدەمنى تەكرارلايمىز. تاكى ئىزدىمەكچى بولغان ئېلمىنتنى تاپقۇچە. يۇقىرىقىلارنى ئەمەلگە ئاشۇرۇشنىڭ 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  

بۇلارنىمۇ ياقتۇرۇپ قالىسىز


ئۈنچىلەر (3)
نەقىللەر (0)
  1. ئالتۇن بۇلاق [ قىرىق تۆتىنچى دەرىجە ] Google Chrome 40.0.2214.94Windows 8 دىۋان 2015/02/16 05:00

    كود يۇرىمايدۇيا؟ ياكى قىستۇرمىنى ئېلىۋەتتىڭلىمۇ؟

  • كۆچۈرۈلمە يوق

ئۈنچە قالدۇرۇش