순차 검색 및 절반 검색 (이진 검색) 및 순환 절반 검색

순차 검색 : 모든 어레이에 적용 가능, 낮은 효율성

이진 검색 : 사용 및 정렬 된 배열, 고효율

 

하나, 순서대로 검색

#include <iostream>

using namespace std;

int sequential_search(int *arry, int size, int val)
{
	for (int i = 0; i < size - 1; i++)
	{
		if (arry[i] == val)
			return i;
	}

	return -1;
}

int main()
{
	int arry[10] = {1,3,4,5,2,0,8,9,6,7,};

	int res = sequential_search(arry,sizeof(arry)/sizeof(arry[0]),6);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "pos:" << res << endl;

	return 0;
}

둘째, 이진 검색

#include <iostream>

using namespace std;



//二分查找
int binary_search(int *arry, int num, int val)
{
	int left = 0, right = num - 1;
	
	while (left <= right)
	{
		int mid = (left + right) / 2;

		if (arry[mid] < val) left = mid +1;
		else if (arry[mid] > val) right = mid - 1;
		else if (arry[mid] == val) return mid;
	}

	return -1;
	
}



int main()
{

	int arry[11] = {1,2,3,4,5,6,7,8,9,10,11};

	int res = binary_search(arry,sizeof(arry)/sizeof(arry[0]),11);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "pos:" <<res<< endl;


	cout << endl << endl << endl;
	return 0;
}

세, 재귀 적 이분법 검색

#include <iostream>

using namespace std;

int binary_search_digui(const int arry[], int val, int left, int right)
{
	int mid = (left + right) / 2;

	while (left <= right)
	{
		if (val > arry[mid])  return binary_search_digui(arry, val, mid + 1, right);
		else if (val < arry[mid]) return binary_search_digui(arry, val, left, mid - 1);
		else return mid;
	}

	return -1;

}

int main()
{
	int arry[] = {0,1,2,3,4,5,6,7,8,9,10,11};

	int res = binary_search_digui(arry,10,0,11);

	if (res < 0)
		cout << "没找到" << endl;
	else
		cout << "找到了,pos:" << res << endl;

	return 0;
}

 

 

추천

출처blog.csdn.net/weixin_40204595/article/details/106314354