>  기사  >  php教程  >  이진 검색 소개

이진 검색 소개

高洛峰
高洛峰원래의
2016-12-19 16:29:391706검색

이진 검색

오늘은 "이진 검색"에 대해 이야기하겠습니다. 이진 검색의 개념은 매번 순차 배열에서 특정 배열의 중간 숫자와 크기를 비교하는 것입니다. 이진 검색의 단점은 배열이 순차적이어야 한다는 것입니다(예를 들어 작은 것부터 큰 것까지 데이터를 정렬했습니다). 장점은 쿼리 효율성이 매우 높고 시간 복잡도가 log2n이라는 것입니다. 빅데이터에서 이 검색 방법을 많이 사용할수록 그 효과는 더욱 분명해질 것입니다. 소스 코드와 단위 테스트는 아래에 첨부되어 있습니다. 소스 코드에는 루프 알고리즘과 재귀 알고리즘이 포함되어 있습니다.
소스 코드:

를 참조하세요.

///


/// 바이너리 방식을 사용하여 데이터 문제의 위치를 ​​찾습니다. (재귀적 방법)
/// 배열은 작은 것부터 큰 것 순으로 정렬해야 합니다. 정렬되지 않은 데이터인 경우에는 class
/// 또는 < cref를 참조하세요. = "StraightInsertionSort"/>
/// 찾으려는 값이 배열에 없으면 -1을 반환합니다.
/// & lt;//summary & gt;
//// & lt; 매개변수 이름 = "배열" & gt; 배열 & lt;/param & gt; lt; "value" & gt; 찾을 값
/// 찾을 값이 배열에 없으면 -1을 반환합니다. 공개 정적 정수 검색(int [] 배열, 정수 값)
                                                                               ) { return array.Length - 1 }
return Search(array, 0, array.Length - 1, value);
}
private static int Search(int[] array, int BeginIndex, int endIndex, int value)
int middle = (beginIndex + endIndex) / 2;
if (endIndex == startIndex)
{ return array[beginIndex] == value ? startIndex : -1 ; }
else if (endIndex == startIndex + 1)
                                                                                        y[endIndex] == 값 ) { return startIndex; }                                                                                                                                              그렇지 않은 경우( 배열[중간 ; (루프 방식)
/// 배열은 작은 것부터 큰 것 순으로 정렬해야 합니다. 정렬되지 않은 데이터인 경우에는 클래스를 사용할 수 있습니다.
/// 또는< cref= "StraightInsertionSort"/> 정렬용 클래스입니다.
/// 찾으려는 값이 배열에 없으면 -1을 반환합니다.
                                                                                                            ~                                              ; 찾을 값
/// 찾을 값이 배열에 없으면 -1을 반환합니다. > Public static int Search2(int [] 배열, int 값)
int startIndex = 0;
int endIndex = array.Length - 1;
while(true)
​ ​ ​ ​ ​ ​​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​<= 1)
                                                    ~         ​🎜>                                                                                                               -1; }
                                                                        ~               if (값 < 배열[중간]) { endIndex = 중간; }
               if (값 == 배열[중간]) { return middle; }
               if (값 > 배열[중간]) { startIndex = middle; }
           }
       }

单元测试:
       [TestMethod()]
       [DeploymentItem("ZjyWorkCodeLibrary.dll")]
       공개 무효 SearchTest()
{
           Random 무작위 = new Random();
           int[] array2 = new int[100];
           for (int i = 0; i < 100; i++)
           {
array2[i] = 무작위.다음(0, 1000);
           }
           int[] array3 = BitmapSort.Sort(array2);
           for (int i = 0; i < array3.Length; i++)
           {
               Assert.AreEqual(BinarySearch.Search(array3, array3[i]), i);
               Assert.AreEqual(BinarySearch.Search2(array3, array3[i]), i) ;
           }
           Assert.AreEqual(BinarySearch.Search(array3, 9999), -1);
           Assert.AreEqual(BinarySearch.Search2(array3, 9999), -1);
      }



更多多分法查找介绍상关文章请关注PHP中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.