21xrx.com
2024-11-22 06:41:30 Friday
登录
文章检索 我的文章 写文章
C++ 如何在数组中查找特定值?
2023-07-13 01:22:43 深夜i     --     --
C++ 数组 查找 特定值

在C++中,可以使用线性搜索或二分搜索在数组中查找特定值。

线性搜索是一种最简单的搜索方法,它从数组的第一个元素开始,逐个比较每个元素,直到找到特定值或到达数组的末尾为止。这是一种比较慢的方法,尤其是当数组很大时,因为它需要逐个比较每个元素。

二分搜索是一种更快的方法,它假设数组已经排序,然后将中间元素与特定值进行比较。如果中间元素大于特定值,则在数组的左半部分重复此过程,否则在数组的右半部分进行搜索。这是一种非常快的方法,尤其是对于大型和已排序的数组。但是,如果数组未排序,则需要首先对其进行排序,这会消耗一定的时间和资源。

在C++中,可以使用std::find函数来执行线性搜索。该函数需要四个参数:数组的指针或迭代器,数组的结尾的指针或迭代器,要搜索的值以及用于比较值的函数或运算符。如果找到该值,则该函数将返回指向该值的指针或迭代器,否则将返回结束指针或迭代器。

示例代码:


#include <iostream>

#include <algorithm>

using namespace std;

int main() {

  int arr[] = 8;

  int n = sizeof(arr) / sizeof(int);

  int findValue = 8;

  int* result = find(arr, arr + n, findValue);

  if (result == arr + n)

    cout << "Value not found." << endl;

   else

    cout << "Value found at index " << result - arr << endl;

  

  return 0;

}

输出:


Value found at index 3

对于二分搜索,C++中提供了std::binary_search和std::lower_bound函数。std::binary_search函数接收三个参数:数组的开头和结尾指针或迭代器,以及搜索的值。如果该值存在于数组中,则该函数返回true,否则返回false。如果使用std::lower_bound函数,则需要将数组排序,该函数接受三个参数:数组的开头和结尾指针或迭代器,以及搜索的值。该函数返回一个指向第一个大于或等于搜索值的指针或迭代器。如果未找到值,则返回数组的结尾指针或迭代器。

示例代码:


#include <iostream>

#include <algorithm>

using namespace std;

int main() {

  int arr[] = 4;

  int n = sizeof(arr) / sizeof(int);

  int findValue = 6;

  bool result = binary_search(arr, arr + n, findValue);

  if (result)

    cout << "Value found." << endl;

   else

    cout << "Value not found." << endl;

  

  int* result2 = lower_bound(arr, arr + n, findValue);

  if (result2 == arr + n)

    cout << "Value not found." << endl;

   else

    cout << "Value found at index " << result2 - arr << endl;

  

  return 0;

}

输出:


Value not found.

Value found at index 4

无论使用线性搜索还是二分搜索,确保数据已排序(如果使用后者)可能会对性能产生重大影响。另外,请确保在执行搜索操作之前检查数据是否有效,如确保数组的指针不为空,指针没有越界等等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复