diff --git a/include/tlibc/algorithms.h b/include/tlibc/algorithms.h new file mode 100644 index 0000000..709d382 --- /dev/null +++ b/include/tlibc/algorithms.h @@ -0,0 +1,31 @@ +#pragma once +#include "std.h" + +/// USAGE insertionSort(list.data, list.len, .id) +#define insertionSort_inline(arr, n, field) \ + for(i32 i = 1, j; i < n; i++) { \ + j = i; \ + while( j > 0 && arr[j - 1]##field > arr[i]##field){\ + arr[j] = arr[j - 1]; \ + j--; \ + } \ + arr[j] = arr[i]; \ + } \ + +#define binarySearch_inline(arr, n, key, field, out_index) {\ + i32 low = 0; \ + i32 high = n - 1; \ + while (low <= high) { \ + i32 mid = low + (high - low) / 2; \ + if (arr[mid]##field == key) { \ + out_index = mid; \ + break; \ + } \ + /* choose left or right half */ \ + if (arr[mid]##field < key) \ + low = mid + 1; \ + else high = mid - 1; \ + } \ + out_index = -1; \ +} +