Skip to content

Instantly share code, notes, and snippets.

@WizzyGeek
Created August 3, 2023 03:39
Show Gist options
  • Save WizzyGeek/7259456e98aef850d41cacc77d37284e to your computer and use it in GitHub Desktop.
Save WizzyGeek/7259456e98aef850d41cacc77d37284e to your computer and use it in GitHub Desktop.
#include"stdlib.h"
#include"stddef.h"
#include"stdio.h"
typedef struct {
int *arr;
size_t len;
} Array;
Array iota(size_t len) {
Array a;
a.len = len;
a.arr = (int*)malloc(sizeof(int) * len);
for (int i = 0; i < len; i++) {
a.arr[i] = i;
}
return a;
}
#define fail (-1)
size_t lin_search(Array a, int elem) {
for (int i = 0; i < a.len; i++) {
if (a.arr[i] == elem) return i;
}
return fail;
}
size_t bisect(Array a, int elem) {
size_t hi = a.len - 1;
size_t lo = 0;
size_t mid;
while (1) {
mid = (hi + lo) >> 1;
if (a.arr[mid] == elem) return mid;
else if (a.arr[mid] > elem) hi = mid - 1;
else lo = mid + 1;
if (hi == lo) {
return (a.arr[hi] == elem) ? hi : fail;
}
}
}
int main() {
Array a = iota(20);
printf("idx of 10: %d\n", lin_search(a, 10));
printf("idx of 19: %llu", bisect(a, 19));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment