template<class E, class K>
int SeqSearch(E *a, const int n, const K& k){ // a는 레코드, n은 갯수, k를 찾아봐라
int i;
for (i = 1; i<=n&&a[i] != k; i++); // 1부터 쭉 가면서 k가 나올 때 까지 찾는다
if (i>n) return 0; // 없으면 0 리턴
return i; // 아니면 키가 몇번째인지 리턴한다.
}
이 리스트에 순서가 있으면 어떻게 되냐? → 다 찾을 필요 없이 순서에 맞게 되어 있으니 조건을 넣어줄 수 있다
for 조건 부분을 i ≤ n && a[i] && a[i] < k
로 변경
i번째 값이 k보다 크면 찾을 필요가 없다
조건 i>n 을 i >n || a[i] ! = k
로 함께 변경
⇒ search 하는 속도가 빨라진다
template<class E, class K>
int BinarySearch(E *a, const int n, const K& k){
int i; int left = 1, right = n, mid; // left, right를 각각 1과 n으로 잡고
while(left<=right){ // 찾을 때 까지 돈다
mid = (left + right)/2; // mid는 가운데값이라고 정하자
if(k<a[mid]) // k가 중간값보다 작으면
right = mid - 1; // 중간보다 왼쪽에 있으니까 RIGHT를 중간값보다 작게
else if(k>a[mid]) // K가 중간값보다 크면
left = mid + 1; // 오른쪽에 있으니까 left를 중간값보다
else return mid; // 둘 다 아니면 값을 찾은 것!
}
return 0; // 못찾으면
}
⇒ 반씩 잘라서 1개가 나올 때 까지 몇 번 잘라야 하나 → 번
내부 방법 internal methods → 알고리즘이 더 중요
정렬할 리스트가 작아서 전체적인 정렬이 메인 메모리 상에서 실행될 수 있을 때 사용
외부 방법 external methods → 데이터베이스에서 많이 사용함
Main Memory 크기를 넘는 큰 리스트를 정렬하는데 사용