순차 탐색 (Linear Search)
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include<stdio.h> int Lsearch(int ar[],int len, int target) { int i; for(i=0; i<len,i++) { if (ar[i]==target) return i; // 찾은 대상 인덱스 값 } return -1; //찾지 못했을 때 } | cs |
이진 탐색(Binary Search)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<stdio.h> int Bsearch(int ar[],int len, int target) { int first =0; int last =0; int mid =0; while(first <= last) { mid = (first+last ) /2 ; if (target == ar[mid]) { return mid; } else { if(target <ar[mid]) last = mid -1; else first = mid +1; } } return -1; } | cs |
이진 탐색은 정렬된 데이터가 아니면 적용이 불가능 하다.
코드 설명 :
1. 배열 인덱스의 시작과 끝은 각각 0과 8이다.
2. 0과 8을 합하여 그 결과를 2로 나눈다.
3. 2로 나눠서 얻은 결과 4 를 인덱스 값으로 하여 ar[4]에 저장된 값이 3인지 확인한다.
4. ar[4]에 저장된 값 9와 3의 대소를 비교한다.
5. 결과는ar[4] > 3이므로 탐색의 범위를 인덱스 기준 0~3 으로 제한한다.
6. 2. 와 같은 순서를 계속 반복한다.
빅-오 표기법(Big-Oh Natation)
'데이터 수의 증가' 에 따른 '연산횟수 증가 현태를 표현한 것'
단순하게 빅- 오 구하기 ▶ "T(n)이 다항식으로 표현이 된 경우, 최고차항의 차수가 빅-오가 된다."
T(n) = n^2 + 2n+9 ▶ O(n^2)
빅-오 표기들의 성능의 대소
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)