배열 요소 읽기 및 쓰기 수를 계산합니다. 버블 정렬을 수행하려면 액세스 가 필요 합니다 (최초의 쓰기가 끝났으며 최악의 경우 n 개의 스왑 을 수행하기위한 2 개의 읽기 및 2 개의 쓰기 ). 이진 검색을 수행하려면 2 log n + 2 n + 1 ( 이진 검색의 경우 2 log n , 최악의 경우 배열 요소를 오른쪽으로 이동하려면 2 n , 배열 요소를 쓰려면 1)이 필요합니다. 올바른 위치).1+4nn2logn+2n+12logn2n
따라서 두 방법 모두 배열 구현에 대해 동일한 복잡성을 갖지만 이진 검색 방법은 장기적으로 무조건 절반의 배열 액세스가 더 적습니다. 자연스럽게 작용하는 다른 요소가 있습니다.
실제로, 더 나은 구현을 사용하고 실제 배열 액세스 만 계산할 수 있습니다 (삽입 할 요소에 대한 액세스는 아님). 당신은 할 수있는 종류의 버블 및 로그 N + 2 , N + 1 이진 검색을위한 ... 그래서 레지스터 / 캐시 액세스가 저렴하고 배열 액세스가 끝에서 검색하고 길을 따라 이동, 비싼 경우 (영리를 삽입을위한 거품 정렬)이 더 좋을 수는 있지만 무증상 일 수도 있습니다.2n+1logn+2n+1
더 나은 솔루션은 다른 데이터 구조를 사용하는 것입니다. 배열은 O (1) 액세스 (임의 액세스)를 제공하지만 삽입 및 삭제 비용이 발생할 수 있습니다. 해시 테이블에는 O (1) 삽입 및 삭제가있을 수 있으며 액세스 비용이 발생합니다. 다른 옵션으로는 BST 및 힙 등이 있습니다. 삽입, 삭제 및 액세스에 대한 응용 프로그램의 사용 요구 사항을 고려하고보다 특수한 구조를 선택하는 것이 좋습니다.
개의 요소 를 n 개의 정렬 된 배열에 추가 하려면 m 개의 항목 을 효율적으로 정렬 한 다음 두 배열을 병합 하는 것이 좋습니다 . 또한 정렬 된 배열은 힙 (힙 정렬) 등을 사용하여 효율적으로 구축 할 수 있습니다.mnm