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