From aa2bd8a4e2dbca21600822afb09f87b152b1ca3c Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Tue, 11 Jul 2017 23:48:49 +0200 Subject: [PATCH] Add array insertion sort. --- src/omv/array.c | 15 +++++++++++++++ src/omv/array.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/omv/array.c b/src/omv/array.c index 05ec2bb3f..98b74be08 100644 --- a/src/omv/array.c +++ b/src/omv/array.c @@ -158,3 +158,18 @@ void array_sort(array_t *array, array_comp_t comp) quicksort(array->data, array->data + array->index - 1, comp); } } + +void array_isort(array_t *array, array_comp_t comp) +{ + if (array->index > 1) { + for (int i = 1; i < array->index; i++) { + int j = i-1; + void *t = array->data[i]; + while (j >= 0 && comp(array->data[j], t)) { + array->data[j+1] = array->data[j]; + j--; + } + array->data[j+1] = t; + } + } +} diff --git a/src/omv/array.h b/src/omv/array.h index 528a59cb4..4af57a7bb 100644 --- a/src/omv/array.h +++ b/src/omv/array.h @@ -31,4 +31,5 @@ void *array_take(array_t *array, int idx); void array_erase(array_t *array, int idx); void array_resize(array_t *array, int num); void array_sort(array_t *array, array_comp_t comp); +void array_isort(array_t *array, array_comp_t comp); #endif //__ARRAY_H__