From 9ce1c209cc86c65bd6185f3e2cda95c276682009 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Wed, 14 Sep 2016 22:41:44 +0200 Subject: [PATCH] lst sort --- libftasm/ft_lst_sort.c | 37 +++++++++++++++++++++++++++++++++++++ libftasm/libft.h | 1 + 2 files changed, 38 insertions(+) create mode 100644 libftasm/ft_lst_sort.c diff --git a/libftasm/ft_lst_sort.c b/libftasm/ft_lst_sort.c new file mode 100644 index 00000000..905aa624 --- /dev/null +++ b/libftasm/ft_lst_sort.c @@ -0,0 +1,37 @@ +#include "libft.h" + +static void ft_lst_swap(t_list **current) +{ + t_list *tmp; + + tmp = (*current)->next->next; + (*current)->next->next = (*current); + (*current)->next = tmp; +} + +void ft_lst_sort(t_list **begin_list, int (*cmp)()) +{ + t_list *current; + t_list *last; + + current = *begin_list; + if (!*begin_list) + return ; + while (current->next) + { + if ((*cmp)(current->content, current->next->content) > 0) + { + if (current != *begin_list) + last->next = current->next; + else + *begin_list = current->next; + ft_lst_swap(¤t); + current = *begin_list; + } + else + { + last = current; + current = current->next ? current->next : current; + } + } +} diff --git a/libftasm/libft.h b/libftasm/libft.h index d8b35651..3836b675 100644 --- a/libftasm/libft.h +++ b/libftasm/libft.h @@ -81,6 +81,7 @@ void ft_lstadd(t_list **alst, t_list *new); void ft_lstiter(t_list *lst, void (*f)(t_list *elem)); t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem)); +void ft_lst_sort(t_list **begin_list, int (*cmp)()); void ft_lst_print(t_list *list, void (*printer)()); int ft_lstsize(t_list *lst); void ft_lsteadd(t_list **alst, t_list *new);