Обобщить функцию линейного поиска - C (СИ)
Формулировка задачи:
Обобщить функцию линейного поиска
для применения при поиске элемента в массиве от элемента с индексом first по элемент с индексом last.
size_t linear_search(const int *a, size_t size, int key) {
size_t idx = 0;
while (a[idx]!=key && idx<size)
++idx;
return idx;
}Решение задачи: «Обобщить функцию линейного поиска»
textual
Листинг программы
size_t LinearSearch(const int* const a, const size_t arrayLength, const size_t first, const size_t last, const int key, int* errorCodePtr)
{
size_t index = 0;
size_t i = 0;
int elementFound = 0;
if (last > arrayLength)
{
(*errorCodePtr) = -1; /* wrong arguments */
}
else
{
i = 0;
elementFound = 0;
while ((i < last) && !elementFound)
{
if (a[i] == key)
{
index = i;
elementFound = 1;
}
i++;
}
if (!elementFound)
{
(*errorCodePtr) = -2; /* element was not found */
}
}
return index;
}
Объяснение кода листинга программы
- Функция LinearSearch выполняет линейный поиск элемента в массиве.
- Параметр
aуказывает на массив, в котором будет производиться поиск. - Параметр
arrayLengthуказывает длину массива. - Параметр
firstуказывает на индекс первого элемента в массиве, с которого начинается поиск. - Параметр
lastуказывает на индекс последнего элемента в массиве, где будет производиться поиск. - Параметр
keyуказывает на элемент, который необходимо найти в массиве. - Параметр
errorCodePtrуказывает на указатель на переменную, в которую будет записано значение ошибки, если такая возникнет. - В начале функции инициализируются переменные
index,iиelementFoundсо значениями 0. - Если
lastбольшеarrayLength, то вerrorCodePtrзаписывается значение -1, и функция возвращает 0. - Если
lastменьше или равноarrayLength, то начинается цикл while, который выполняется до тех пор, покаiменьшеlastи элемент с ключомkeyне найден. - Внутри цикла проверяется равенство
a[i]ключуkey. - Если равенство выполняется, то переменная
indexустанавливается равнойi, а переменнаяelementFoundустанавливается равной 1. - Если равенство не выполняется, то переменная
iувеличивается на 1. - Если цикл закончился и элемент с ключом
keyне найден, то вerrorCodePtrзаписывается значение -2, и функция возвращает 0. - Если элемент с ключом
keyнайден, то функция возвращает значениеindex.