added inline insertion sort and binary search
This commit is contained in:
31
include/tlibc/algorithms.h
Normal file
31
include/tlibc/algorithms.h
Normal file
@@ -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; \
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user