42
This commit is contained in:
parent
e72a8503d9
commit
2d7f77ca19
30
process.c
30
process.c
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "push_swap.h"
|
#include "push_swap.h"
|
||||||
|
|
||||||
void ft_sa_sb(t_list **list, t_list **process, char type, int set)
|
t_list *ft_sa_sb(t_list **list, s_list **process, char type, int set)
|
||||||
{
|
{
|
||||||
t_list *swap;
|
t_list *swap;
|
||||||
|
|
||||||
@ -22,14 +22,14 @@ void ft_sa_sb(t_list **list, t_list **process, char type, int set)
|
|||||||
(*list)->next->next = swap;
|
(*list)->next->next = swap;
|
||||||
if (set)
|
if (set)
|
||||||
{
|
{
|
||||||
if (type)
|
if (type = 'a')
|
||||||
ft_lstadd_back(process, new_slist("sa"));
|
s_lstadd_back(process, new_slist("sa"));
|
||||||
else
|
else if (type = 'b')
|
||||||
ft_lstadd_back(process, new_slist("sb"));
|
s_lstadd_back(process, new_slist("sb"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ft_ra_rb(t_list **list, t_list **process, char type)
|
t_list *ft_ra_rb(t_list **list, s_list **process, char type)
|
||||||
{
|
{
|
||||||
t_list *swap;
|
t_list *swap;
|
||||||
|
|
||||||
@ -37,33 +37,33 @@ void ft_ra_rb(t_list **list, t_list **process, char type)
|
|||||||
(ft_lstlast(*list))->next = *list;
|
(ft_lstlast(*list))->next = *list;
|
||||||
*list = (*list)->next;
|
*list = (*list)->next;
|
||||||
swap->next = 0;
|
swap->next = 0;
|
||||||
if (type)
|
if (type = 'a')
|
||||||
ft_lstadd_back(process, new_slist("ra"));
|
s_lstadd_back(process, new_slist("ra"));
|
||||||
else
|
else if (type = 'b')
|
||||||
ft_lstadd_back(process, new_slist("rb"));
|
s_lstadd_back(process, new_slist("rb"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ft_pa(t_list **list_a, t_list **list_b, t_list **process)
|
t_list *ft_pa(t_list **list_a, t_list **list_b, s_list **process)
|
||||||
{
|
{
|
||||||
t_list *swap;
|
t_list *swap;
|
||||||
|
|
||||||
swap = *list_b;
|
swap = *list_b;
|
||||||
*list_b = (*list_b)->next;
|
*list_b = (*list_b)->next;
|
||||||
ft_lstadd_front(list_a, swap);
|
ft_lstadd_front(list_a, swap);
|
||||||
ft_lstadd_back(process, new_slist("pa"));
|
s_lstadd_back(process, new_slist("pa"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ft_pb(t_list **list_a, t_list **list_b, t_list **process)
|
t_list *ft_pb(t_list **list_a, t_list **list_b, s_list **process)
|
||||||
{
|
{
|
||||||
t_list *swap;
|
t_list *swap;
|
||||||
|
|
||||||
swap = *list_a;
|
swap = *list_a;
|
||||||
*list_a = (*list_a)->next;
|
*list_a = (*list_a)->next;
|
||||||
ft_lstadd_front(list_b, swap);
|
ft_lstadd_front(list_b, swap);
|
||||||
ft_lstadd_back(process, new_slist("pb"));
|
s_lstadd_back(process, new_slist("pb"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ft_rra_rrb(t_list **list, t_list **process, char type)
|
t_list * ft_rra_rrb(t_list **list, s_list **process, char type)
|
||||||
{
|
{
|
||||||
t_list *swap;
|
t_list *swap;
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@ void printf_list(t_list *start)
|
|||||||
printf("lst%d --- nbr: %d index: %d\n", i,*(int*)start->nbr, start->index);
|
printf("lst%d --- nbr: %d index: %d\n", i,*(int*)start->nbr, start->index);
|
||||||
start = start->next;
|
start = start->next;
|
||||||
}
|
}
|
||||||
|
printf("----end_print----");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
push_swap.h
13
push_swap.h
@ -31,13 +31,22 @@ void lst_indexing(t_list *list);
|
|||||||
int is_double(int nbrarg, char **list);
|
int is_double(int nbrarg, char **list);
|
||||||
int is_sorted(t_list *list);
|
int is_sorted(t_list *list);
|
||||||
void find_loop_index(t_list *list);
|
void find_loop_index(t_list *list);
|
||||||
int find_loop(t_list *start, t_list *list);
|
int find_loop(t_list *start, t_list *list, int setswap);
|
||||||
t_list *ft_lstnew(void *content);
|
t_list *ft_lstnew(void *content);
|
||||||
void s_lstclear(s_list **lst, void (*del)(void*));
|
void s_lstclear(s_list **lst, void (*del)(void*));
|
||||||
void swap_to_b(t_list list, t_list best,int loop);
|
void swap_to_b(t_list *list, t_list *best, int loop);
|
||||||
|
s_list *new_slist(void *content);
|
||||||
|
void s_lstadd_back(s_list **alst, s_list *new);
|
||||||
|
s_list *s_lstlast(s_list *lst);
|
||||||
|
|
||||||
|
|
||||||
|
t_list *ft_sa_sb(t_list **list, s_list **process, char type, int set);
|
||||||
|
t_list *ft_ra_rb(t_list **list, s_list **process, char type);
|
||||||
|
t_list *ft_pa(t_list **list_a, t_list **list_b, s_list **process);
|
||||||
|
t_list *ft_pb(t_list **list_a, t_list **list_b, s_list **process);
|
||||||
|
|
||||||
|
|
||||||
|
void printf_list(t_list *start);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
22
s_list.c
22
s_list.c
@ -10,6 +10,8 @@
|
|||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "push_swap.h"
|
||||||
|
|
||||||
s_list *new_slist(void *content)
|
s_list *new_slist(void *content)
|
||||||
{
|
{
|
||||||
s_list *new;
|
s_list *new;
|
||||||
@ -17,9 +19,8 @@ s_list *new_slist(void *content)
|
|||||||
new = (s_list*)malloc(sizeof(s_list));
|
new = (s_list*)malloc(sizeof(s_list));
|
||||||
if (!new)
|
if (!new)
|
||||||
return (0);
|
return (0);
|
||||||
new->nbr = content;
|
new->action = content;
|
||||||
new->next = 0;
|
new->next = 0;
|
||||||
new->swap = 0;
|
|
||||||
return (new);
|
return (new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,3 +38,20 @@ void s_lstclear(s_list **lst, void (*del)(void*))
|
|||||||
}
|
}
|
||||||
lst = 0;
|
lst = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void s_lstadd_back(s_list **alst, s_list *new)
|
||||||
|
{
|
||||||
|
if (*alst == 0)
|
||||||
|
*alst = new;
|
||||||
|
else
|
||||||
|
ft_lstlast(*alst)->next = new;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_list *s_lstlast(s_list *lst)
|
||||||
|
{
|
||||||
|
if (!lst)
|
||||||
|
return (0);
|
||||||
|
while (lst->next)
|
||||||
|
lst = lst->next;
|
||||||
|
return (lst);
|
||||||
|
}
|
||||||
|
|||||||
31
sorting.c
31
sorting.c
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "push_swap.h"
|
#include "push_swap.h"
|
||||||
|
|
||||||
|
|
||||||
void find_loop_index(t_list *list)
|
void find_loop_index(t_list *list)
|
||||||
{
|
{
|
||||||
t_list *start;
|
t_list *start;
|
||||||
@ -33,6 +34,7 @@ void find_loop_index(t_list *list)
|
|||||||
list = list->next;
|
list = list->next;
|
||||||
}
|
}
|
||||||
find_loop(start, save, 1);
|
find_loop(start, save, 1);
|
||||||
|
swap_to_b(start, save, loop_size2);
|
||||||
printf("loop_size = %d\n", loop_size2);
|
printf("loop_size = %d\n", loop_size2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,30 +65,37 @@ int find_loop(t_list *start, t_list *list, int setswap)
|
|||||||
return (loop_size);
|
return (loop_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap_to_b(t_list list, t_list best,int loop)
|
void swap_to_b(t_list *list, t_list *best, int loop)
|
||||||
{
|
{
|
||||||
|
s_list *action;
|
||||||
int swap;
|
int swap;
|
||||||
t_list start;
|
int lst_size;
|
||||||
|
t_list *b;
|
||||||
|
|
||||||
start = list;
|
b = 0;
|
||||||
|
action = 0;
|
||||||
|
lst_size = ft_lstsize(list);
|
||||||
swap = 0;
|
swap = 0;
|
||||||
while (list)
|
printf_list(list);
|
||||||
|
while (lst_size)
|
||||||
{
|
{
|
||||||
ft_sa_sb();
|
ft_sa_sb(&list, &action, 'a', 0);
|
||||||
swap = find_loop(start, best);
|
swap = find_loop(list, best, 0);
|
||||||
if (swap > loop)
|
if (swap > loop)
|
||||||
{
|
{
|
||||||
loop = swap;
|
loop = swap;
|
||||||
add_sa();
|
s_lstadd_back(&action, new_slist("sa"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ft_sa_sb();
|
ft_sa_sb(&list, &action, 'a', 0);
|
||||||
if(list->swap)
|
if(list->swap)
|
||||||
ft_pa();
|
ft_pb(&list, &b, &action);
|
||||||
else if (!list->swap)
|
else if (!list->swap)
|
||||||
ft_ra_rb();
|
ft_ra_rb(&list, &action, 'a');
|
||||||
list = list->next;
|
lst_size--;
|
||||||
|
printf_list(list);
|
||||||
}
|
}
|
||||||
|
printf("\nswap done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user