순차 검색 : 모든 어레이에 적용 가능, 낮은 효율성
이진 검색 : 사용 및 정렬 된 배열, 고효율
하나, 순서대로 검색
#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;
}