C++

[강의] 11월 26일 수업정리

k-codestudy 2024. 11. 27. 03:39

오늘은 이진 검색 알고리즘에 대한 수업을 들었다.

 

1. 이진 검색 알고리즘

오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.

처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다.

 

이진 검색은 정렬된 리스트에서만 사용할 수 있다는 단점이 존재하지만, 검색이 반복될 때마다 검색 범위가 절반으로 줄기 떄문에 속도가 빠르다는 장점이 있다 ( log n )

 

 

1.1 포인터와 길이를 이용하여 이진 검색 알고리즘 

#include <iostream>

int main()
{
	int arData[40]{};
	int nData{};
	for (int i = 0; i < 40; i++)
	{
		arData[i] = i * 2;
	}

	scanf_s("%d", &nData);

	int* pData = arData;
	int nLength = 40;
	int nFindIndex = nLength / 2;
	int* pResult = pData + nFindIndex;

	while (nLength > 0 && pData[nFindIndex] != nData)
	{
		if (pData[nFindIndex] > nData)
			nLength = nFindIndex;
		else if (pData[nFindIndex] < nData)
		{
			pData = pData + nFindIndex + 1;
			nLength = nLength - (nFindIndex + 1);
		}
		nFindIndex = nLength / 2;
		pResult = pData + nFindIndex;
	}

	if (nLength <= 0)
		printf("못 찾았다\n");
	else
	{
		printf("%d ", *pResult);
		printf("index : %d\n", pResult - arData);
	}
}