📅  最后修改于: 2023-12-03 15:27:48.987000             🧑  作者: Mango
在编程中,经常需要根据给定的值或条件来查找一个元素在数组中的索引位置。C++提供了多种方法来实现这一功能,本文将介绍常用的几种方法。
线性搜索是最简单直接的方法,就是从数组的第一个元素开始,逐个比较每个元素是否满足条件。如果找到了满足条件的元素,就返回其在数组中的索引。否则返回-1表示未找到。
int linearSearch(int arr[], int n, int key) {
for (int i = 0; i < n; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
例如,找到数组中第一个值为5的元素:
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 5;
int index = linearSearch(arr, n, key);
if (index != -1) {
cout << "Found at index " << index << endl;
} else {
cout << "Not found" << endl;
}
二分搜索是一种更高效的搜索方法,对于已经排好序的数组,可以在更短的时间内找到某个元素的索引。基本思路是将数组分为两个子数组,如果中间元素与目标元素相等,则返回中间元素的索引;如果中间元素大于目标元素,则在左子数组中查找;如果中间元素小于目标元素,则在右子数组中查找。
int binarySearch(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
例如,找到数组中第一个值为5的元素:
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 5;
int index = binarySearch(arr, 0, n - 1, key);
if (index != -1) {
cout << "Found at index " << index << endl;
} else {
cout << "Not found" << endl;
}
STL(Standard Template Library)提供了一个在迭代器范围内查找元素的函数find(),可以用来查找数组中的某个值。如果找到了该值,返回指向该元素的迭代器,否则返回容器的end()位置。
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 5;
int *ptr = find(arr, arr + n, key);
if (ptr != arr + n) {
cout << "Found at index " << ptr - arr << endl;
} else {
cout << "Not found" << endl;
}
其中,ptr - arr表示指针ptr与数组arr的地址之差,即该元素在数组中的索引。
以上就是获取值的索引的几种常见方法,根据不同情况可以选择适合自己的方法。