aboutsummaryrefslogtreecommitdiff
path: root/test_mini/libft/src/algo/ft_mergesort.c
diff options
context:
space:
mode:
authornass1pro <nass1pro@gmail.com>2020-06-12 13:52:58 +0200
committernass1pro <nass1pro@gmail.com>2020-06-13 11:45:50 +0200
commitd971bd8d16608f316396aba7a579d0b1f1af5aeb (patch)
tree98ec558582ed20a120e13b4a376fd206fb620da0 /test_mini/libft/src/algo/ft_mergesort.c
parent3136f59540a8dd29e2f096be5a8943e2ddd28431 (diff)
downloadminishell-d971bd8d16608f316396aba7a579d0b1f1af5aeb.tar.gz
minishell-d971bd8d16608f316396aba7a579d0b1f1af5aeb.tar.bz2
minishell-d971bd8d16608f316396aba7a579d0b1f1af5aeb.zip
Added e_token enum
Diffstat (limited to 'test_mini/libft/src/algo/ft_mergesort.c')
-rw-r--r--test_mini/libft/src/algo/ft_mergesort.c76
1 files changed, 0 insertions, 76 deletions
diff --git a/test_mini/libft/src/algo/ft_mergesort.c b/test_mini/libft/src/algo/ft_mergesort.c
deleted file mode 100644
index 25b4255..0000000
--- a/test_mini/libft/src/algo/ft_mergesort.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* ft_mergesort.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2020/02/10 02:26:41 by cacharle #+# #+# */
-/* Updated: 2020/02/13 23:14:21 by cacharle ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "libft_algo.h"
-
-static int st_mergesort_error(void *left, void *right)
-{
- free(left);
- free(right);
- return (-1);
-}
-
-static void st_merge_sorted(struct s_merge_sorted_arrays *arrays, size_t nel,
- size_t width, int (*compar)(const void *, const void *))
-{
- size_t bi;
- size_t li;
- size_t ri;
- size_t mid;
-
- mid = nel / 2;
- bi = 0;
- li = 0;
- ri = 0;
- while (li < mid && ri < nel - mid)
- {
- if (compar(arrays->left + li * width, arrays->right + ri * width) < 0)
- ft_memcpy(arrays->base + bi * width,
- arrays->left + li++ * width, width);
- else
- ft_memcpy(arrays->base + bi * width,
- arrays->right + ri++ * width, width);
- bi++;
- }
- while (li < mid)
- ft_memcpy(arrays->base + bi++ * width,
- arrays->left + li++ * width, width);
- while (ri < nel - mid)
- ft_memcpy(arrays->base + bi++ * width,
- arrays->right + ri++ * width, width);
-}
-
-int ft_mergesort(void *base, size_t nel, size_t width,
- int (*compar)(const void *, const void *))
-{
- size_t mid;
- struct s_merge_sorted_arrays arrays;
-
- if (nel < 2)
- return (0);
- mid = nel / 2;
- if ((arrays.left = malloc(mid * width)) == NULL)
- return (-1);
- if ((arrays.right = malloc((nel - mid) * width)) == NULL)
- return (st_mergesort_error(arrays.left, NULL));
- ft_memcpy(arrays.left, base, mid * width);
- ft_memcpy(arrays.right, base + mid * width, (nel - mid) * width);
- if (ft_mergesort(arrays.left, mid, width, compar) == -1)
- return (st_mergesort_error(arrays.left, arrays.right));
- if (ft_mergesort(arrays.right, nel - mid, width, compar) == -1)
- return (st_mergesort_error(arrays.left, arrays.right));
- arrays.base = base;
- st_merge_sorted(&arrays, nel, width, compar);
- free(arrays.left);
- free(arrays.right);
- return (0);
-}