目录
1.顺序查找(sequential_search)
使用场景:未排序数组
int sequential_search(int arr[], int size, int target)
{
for (int i = 0; i < size; i++)
{
if (arr[i] == target)return i;
}
return -1;
}
/**
*arr:要查找的范围数组
*size要查找的数组大小
*target:要查找的目标数据
*return:查找目标的下标,若不存在返回-1
**/
int main()
{
int n;
int score[] = { 99,20,85,65,33 };
cout << "请输入99,20,85,65,33中的一个数" << '\n';
cin >> n;
int idx = sequential_search(score, sizeof(score) / sizeof(score[0]), n);
cout << "数据" << n << "排在第" << idx << "位" << '\n';
}
2.二分查找(binary_search)
使用场景:已排序的数组
(1)循环实现
/*
*arr;查找范围数组
*low:低位
* mid:中位
* high:高位
* target:要查找的目标数据
* return:查找目标的下标,若不存在返回-1
*/
int binary_search(int arr[], int low, int high, int target)
{
while (low <= high)
{
int mid = (low + high) / 2;
if (arr[mid] == target)return mid;
else if (arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int main()
{
int score[] = { 55,60,77,89,98 };
int n;
cout << "请从数字中55,60,77,89,98中输入查找目标" << '\n';
cin >> n;
int idx = binary_search(score,
0,
sizeof(score) / sizeof(score[0]) - 1,
n);
cout << "数据" << n << "在第" << idx << "位" << '\n';
return 0;
}
(2)递归实现
// 递归实现
int binary_search(int arr[], int low, int high, int target)
{
if (low > high)return -1;
int mid = (low + high) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] < target)
return binary_search(arr, mid + 1, high, target);
else
return binary_search(arr, low, mid - 1, target);
}