рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдФрд░ рдорд░реНрдЬ рд╕реЙрд░реНрдЯ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИ

рдпрд╣ рдЬреЛрд╢реБрдЖ рдмрд▓реЛрдЪ рдХреЗ 2006 рдХреЗ рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╣реИ , рдЕрддрд┐рд░рд┐рдХреНрдд - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкрдврд╝реЗрдВ: рд▓рдЧрднрдЧ рд╕рднреА рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдФрд░ рдорд░реНрдЬрд░реНрдЯреНрд╕ рдмреНрд░реЛрдХрди рд▓реЗрдЦ рд╣реИрдВ ред

рдореБрдЭреЗ рдХрд╛рд░реНрдиреЗрдЧреА рдореЗрд▓рди рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдореЗрдВ рдЬреЙрди рдмреЗрдВрдЯрд▓реЗ рдХрд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдпрд╛рдж рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдорд╕реЗ рдкреВрдЫрд╛, рд╣реМрд╕рд▓реЗ рд╕реЗ рдкрдХреЗ рд╣реБрдП рд╕реНрдирд╛рддрдХ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рдЗрд╕реЗ рдмреЛрд░реНрдб рдкрд░ рдЙрддрд╛рд░рд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдЧрд▓рддреА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд▓рд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрдИ рдЕрдиреНрдп рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рдерд╛ред рдпрд╣ рдШрдЯрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдирдХреА рдкреБрд╕реНрддрдХ "рдкрд░реНрд▓ рдСрдлрд╝ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдерд╛ред рдиреИрддрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛ рд╣реИред

рдФрд░ рдЕрдм, рдЕрдм 2006 рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЭрдЯрдХрд╛ рд▓рдЧрд╛ рдХрд┐ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬрд┐рд╕реЗ рдмреЗрдВрдЯрд▓реЗ рдиреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛, рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдпрд╣ рдордд рд╕реЛрдЪреЛ рдХрд┐ рдореБрдЭреЗ рджреЛрд╖ рд▓рдЧрддрд╛ рд╣реИ; рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЧрд▓рддреА рджрд╢рдХреЛрдВ рддрдХ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЛ рдЦрд╝рд░рд╛рдм рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ JDK рдХреЗ рд▓рд┐рдП рдЬреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рд▓рд┐рдЦреА рдереА, рд╡рд╣ рднреА рд▓рдЧрднрдЧ рдиреМ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЫреЛрдЯреА рдереАред рдФрд░ рдХреЗрд╡рд▓ рдЕрдм, рдЬрдм рдЙрд╕рдиреЗ рдХрд┐рд╕реА рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛, рддреЛ рдЙрд╕реЗ рд╕рди рдХреА рд╕реВрдЪрдирд╛ рджреА рдЧрдИред

рддреЛ рдЧрд▓рддреА рдХреНрдпрд╛ рд╣реИ? рдпрд╣рд╛рдБ рдЬрд╛рд╡рд╛ рдореЗрдВ рдорд╛рдирдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ java.util.Arrays рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред

 public static int binarySearch(int[] a, int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = (low + high) / 2; int midVal = a[mid]; if (midVal < key) low = mid + 1 else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. } 

рдЫрдареА рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐:

  int mid = (low + high) / 2; 

рдж рдкреАрдпрд░реНрд╕ рдСрдл рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдмреЗрдВрдЯрд▓реЗ рдиреЗ рдПрдХ рд╕рдорд╛рди рдкрдВрдХреНрддрд┐ рдХреА рдХреАрдордд рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рд╡рд╣ "рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдФрд╕рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬреЛ рдирд┐рдХрдЯрддрдо рдЫреЛрдЯреЗ рдкреВрд░реНрдгрд╛рдВрдХ рддрдХ рдЧреЛрд▓ рд╣реИред" рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ low рдФрд░ high (рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдЙрдирдХреА рд░рд╛рд╢рд┐ 2 31 -1 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ) рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдЙрдирдХрд╛ рдпреЛрдЧ рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ mid рднреА рдЛрдгрд╛рддреНрдордХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реА рдореЗрдВ, рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЗ рдмрд╛рд╣рд░ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рдЬрд╛рд╡рд╛ рдПрдХ ArrayIndexOutOfBoundsException рдлреЗрдВрдХрддрд╛ рд╣реИред

рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, 2 30 рд╕реЗ рдЕрдзрд┐рдХ (рдПрдХ рдЕрд░рдм рдХреЗ рдЖрджреЗрд╢ рдХреЗ) рддрддреНрд╡ред 80 рдХреЗ рджрд╢рдХ рдореЗрдВ, рдЬрдм рдкреБрд╕реНрддрдХ рдореЗрдВ рджрд┐рди рдХрд╛ рдкреНрд░рдХрд╛рд╢ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рдерд╛, рддреЛ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм Google рдкрд░ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ) рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИред рдмреЗрдВрдЯрд▓реЗ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдореЛрддреА" рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: "рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг 1946 рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдерд╛, рд╕рд╣реА рдХреЛрдб рдЬреЛ n рдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ 1962 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм рддрдХ рдХрд╛ рд╕рд╣реА рдХреЛрдб рд╢рд╛рдпрдж рд╣реА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИред

рддреЛ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ? рдЫрдареА рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  int mid = low + ((high - low) / 2); 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд╛рдпрдж, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рддреЗрдЬ рдФрд░ рд╕рд░рд▓ рд╣реИ:

  int mid = (low + high) >>> 1; 

C / C ++ рдореЗрдВ рдХреЛрдИ >>> рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  mid = ((unsigned int)low + (unsigned int)high)) >> 1; 

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдФрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рдЦреИрд░ ... рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдВрднрд╡ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд▓рдЧрднрдЧ рдХрднреА рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИ: рдЖрдкрдХреЛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдВрддрд░рд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреЛрд╢рд┐рд╢ рднреА рдордд рдХрд░реЛ

рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд░реНрдЬ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрдб-рдПрдВрдб-рдХреЙрдирдХреЛрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕рд╛рдордиреЗ рдЖ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдРрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд┐рдП рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рддрдм рддрдХ рдбрдмрд▓-рдЪреЗрдХ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЕрдкреНрд░рд┐рдп рдкрд░рд┐рдгрд╛рдо рди рд╣реЛред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдЧрд▓рддреА рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╡рд┐рдирдореНрд░ рд╣реЛрдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдФрд░ рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдХреНрд╖реНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╣рдо рд╣рд░ рджрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдЯреАрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдбрд┐рдЬрд╛рдЗрди рдЕрдЪреНрдЫрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рд╕рд┐рд░реНрдл рдорд╣рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдХреЛрдИ рднреА рд╣рдореЗрдВ рдорд╛рдпрд╛рд╡реА рдмрдЧ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рдПрдЧрд╛ред рд╣рдореЗрдВ рдиреАрд░рд╕ рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рддрд░реНрдХ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

17 рдлрд░рд╡рд░реА, 2008 рдХреЛ рдлрд╝рд┐рдирд┐рд╢ рд░рд┐рд╕рд░реНрдЪ рд╕реЗрдВрдЯрд░ рдХреЗ рдореБрдЦреНрдп рдЕрднрд┐рдпрдВрддрд╛ рдиреЛрдХрд┐рдпрд╛ рдПрдВрдЯреЛрдиреА рдЯреНрд░реВрдХреНрд╕ (рдПрдВрдЯреЛрдиреА рдЯреНрд░реВрдХреНрд╕) рдиреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдХрд┐ рд╕реА рдФрд░ рд╕реА ++ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЕрдм рдЬрдм рд╣рдордиреЗ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред ;)

рд╕рдВрджрд░реНрдн:

Source: https://habr.com/ru/post/In203398/


All Articles