peewoong 2024. 1. 6. 19:56

μ„ ν˜• 검색

μž„μ˜μ˜ λ°°μ—΄μ—μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜

'μž„μ˜μ˜'인 μ΄μœ λŠ” 크기 μˆœμ„œλŒ€λ‘œ μ •λ ¬λœ 배열이라면 '이진 검색'을 μ‚¬μš©ν•˜λŠ” 것이 λ‚«λ‹€.

μˆœμ„œ λ¬΄μž‘μœ„. λ°°μ—΄μ˜ μ•žμ—μ„œλΆ€ν„° 데이터λ₯Ό ν™•μΈν•œλ‹€. 계산 μ‹œκ°„μ€ O(n)

 

예) μ§€μ •ν•œ κ°’κ³Ό λ°°μ—΄μ˜ 값이 같을 경우 μ’…λ£Œ. 배열에 같은 값이 μ€‘λ³΅μœΌλ‘œ μžˆμ„ κ²½μš°μ—λ„, 처음 발견된 μ‹œμ μ— μ’…λ£Œν•œλ‹€.

x=68인 경우, '1'

 

μ›ν•˜λŠ” 값이 λ°œκ²¬λ˜μ§€ μ•Šμ€ 경우 '-1'을 ν‘œμ‹œν•œλ‹€. -1은 인덱슀둜 μ‚¬μš©ν•  수 μ—†λŠ” 값이기 λ•Œλ¬Έ

#include <stdio.h>
#define LENGTH 10

int main(void) {
	int x = 0;
	int pos = -1;
	int a[] = { 72, 68, 92, 88, 41, 53, 97, 84, 39, 55 };

	printf("μž…λ ₯ν•  숫자 : ");
	scanf_s("%d", &x);
	printf("반볡 μ‹€ν–‰ μ „ : x = %d, pos = %d\n", x, pos);

	// 배열을 λκΉŒμ§€ ν™•μΈν•˜μ§€ μ•Šμ•˜κ³ , μ›ν•˜λŠ” 값이 λ°œκ²¬λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ λ°˜λ³΅ν•˜λΌλŠ” 의미
	for (int i = 0; i < LENGTH && pos == -1; ++i) {
		if (a[i] == x) {
			pos = i;
		}

		printf("반볡 μ‹€ν–‰ 쀑 : i = %d, pos = %d\n", i, pos);
	}

	printf("%d\n", pos);
	printf("반볡 μ‹€ν–‰ ν›„ :  pos = %d\n", pos);
	return 0;
}

 

μ„ ν˜• 검색을 νš¨μœ¨ν™”ν•˜λŠ” λ³΄μ΄ˆλ²•μ˜ 값은?

더보기

μ„ ν˜• 검색을 νš¨μœ¨ν™”ν•˜λŠ” 기술둜써 λ³΄μ΄ˆλ³‘μ˜ κ°œλ…μ„ μ΄μš©ν•˜λŠ” 'λ³΄μ΄ˆλ²•'이 μžˆλ‹€. = λŒ€μƒ 데이터

μ„ ν˜• 검색은 λ°°μ—΄μ˜ 끝에 λ³΄μ΄ˆλ²•μ˜ 값에 ν•΄λ‹Ήν•˜λŠ” 데이터λ₯Ό μΆ”κ°€ν•œ ν›„ 검색 횟수λ₯Ό 쀄여 값을 λΉ λ₯΄κ²Œ 찾을 수 μžˆλ‹€. 

cf. λ³΄μ΄ˆλ²•μ˜ 값이 없을 λ•ŒλŠ”μš”μ†Œ ν•˜λ‚˜μ— λŒ€ν•΄ 두 가지 검사가 이루어진닀.

 

예) λ°°μ—΄μ—μ„œ 53을 찾으렀면 λ³΄μ΄ˆλ²•μ˜ 값을 λ¬΄μ—‡μœΌλ‘œ ν•˜λ©΄ μ’‹μ„κΉŒ?

λ°°μ—΄μ—μ„œ 53μ΄λΌλŠ” 값을 찾을 경우, λ³΄μ΄ˆλ²•μ˜ 값을 53으둜 ν•œλ‹€. λ³΄μ΄ˆλ²•μ˜ 값이 없을 λ•ŒλŠ” μš”μ†Œ ν•˜λ‚˜μ— λŒ€ν•΄ '53인가?'와 '끝인가?'λΌλŠ”λ‘ 가지 사항을 ν™•μΈν•œλ‹€. λ³΄μ΄ˆλ²•μ„ μ‚¬μš©ν•˜λ©΄ '끝인가?'λΌλŠ” 확인이 λΆˆν•„μš”ν•΄μ§„λ‹€. μ™œλƒν•˜λ©΄ λ°°μ—΄μ˜ 쀑간에 53이 없더라도 끝에 53이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έ

μ›ν•˜λŠ” 값이 λ‚˜μ˜€λ©΄ λ°”λ‘œ μ‹€ν–‰ 쀑지

 

λ°°μ—΄μ˜ μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’ κ΅¬ν•˜κΈ°

#include <stdio.h>
#define LENGTH 10

int main(void) {
	int a[] = { 72, 68, 92, 88, 41, 53, 97, 84, 39, 55 };
	int max, min;

	max = a[0];
	min = a[0];

	for (int i = 0; i < LENGTH; ++i) {
		if (a[i] > max) {
			max = a[i];
		}
		if (a[i] < min) {
			min = a[i];
		}
	}

	printf("μ΅œλŒ“κ°’ : %d\n", max);
	printf("μ΅œμ†Ÿκ°’ : %d\n", min);
	return 0;
}