1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
bool is_number_in_array(int n, int* numbers, size_t len) {
while(len > 1) { // while the array is not empty or size 1
size_t len_0 = (len + 1) / 2;
size_t len_1 = len / 2;
assert(len_0 + len_1 == len);
int* numbers_0 = numbers; // first subarray starts at same point as numbers
int* numbers_1 = numbers + len_0; // second subarray starts right after first
if(n <= numbers_0[len_0 - 1]) {
numbers = numbers_0;
len = len_0:
//return is_number_in_array(n, numbers_0, len_0); // RECURSIVE CALL <<<<<<<
}
else {
numbers = numbers_1;
len = len_1:
//return is_number_in_array(n, numbers_1, len_1); // RECURSIVE CALL <<<<<<<
}
}
if(len == 0) {
return false;
}
if(len == 1) {
return numbers[0] == n;
}
}
int main(int argc, char* argv[]) {
int primes[] = { 2, 3, 5, 7, 11, 13, 17, 19 };
int n = 7;
size_t num_primes = sizeof primes / sizeof primes[0]; // ONLY use this for static array
printf("%d %s prime", n, is_number_in_array(n, primes, num_primes) ? "is" : "is NOT");
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2023 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.