int ft_f(int f, t_ps *ps) { if (f == SA) return (ft_sa(ps)); else if (f == SB) return (ft_sb(ps)); else if (f == SS) return (ft_ss(ps)); else if (f == PB) return (ft_pb(ps)); else if (f == PA) return (ft_pa(ps)); else if (f == RA) return (ft_ra(ps)); else if (f == RB) return (ft_rb(ps)); else if (f == RR) return (ft_rr(ps)); else if (f == RRA) return (ft_rra(ps)); else if (f == RRB) return (ft_rrb(ps)); else if (f == RRR) return (ft_rrr(ps)); return (0); }
void small_swap(t_shell *h) { while (l_len(h->sa) > 1) { if (l_len(h->sb) > 1 && h->sa->nb > h->sa->n->nb && h->sb->nb < h->sb->n->nb) ft_ss(h, 1); else if (h->sa->nb > h->sa->n->nb) ft_sa(h, 1); else if (l_len(h->sb) > 1 && h->sb->nb < h->sb->n->nb) ft_sb(h, 1); if (h->max == h->sa->nb || (l_len(h->sb) > 2 && h->sa->nb > h->sa->n->nb && h->sa->nb > h->sa->n->n->nb)) ft_ra(h, 1); while (l_len(h->sa) > 2 && l_nb(h->sa) < h->sa->nb && l_nb(h->sa) < h->sa->n->nb) ft_rra(h, 1); if (l_len(h->sb) > 1 && l_nb(h->sb) > h->sb->nb) ft_rrb(h, 1); if (ft_sorted(h->sa)) break ; ft_pb(h, 1); if (l_len(h->sb) > 2 && ((h->sb->nb < h->sb->n->nb && h->sb->nb < h->sb->n->n->nb) || l_nb(h->sb) > h->sb->nb)) ft_rb(h, 1); } push_swap_suite(h); }
void while_bigger(t_shell *head) { if (where_is_next(head) == 1) ft_rb(head, 1); else ft_rrb(head, 1); }
static int ft_rr(t_ps *ps) { int i; i = 0; i += ft_ra(ps); i += ft_rb(ps); return (i); }
void sort_b_list(t_shell *head, int *biggest, int len) { if (l_len(head->sb) <= 1) return ; if (head->sb->nb > l_nb(head->sb)) ft_rb(head, 1); if (head->sb->nb > head->sb->n->nb) { if (arr(head->sa->nb, biggest, len) && arr(head->sa->n->nb, biggest, len) && head->sa->n->nb > head->sa->nb) ft_ss(head, 1); } }
static int ft_mix_ab_bis(t_ps *a, t_ps *b, t_env *env) { int i; i = 0; while (a->rp < b->rp) { i += ft_rb(env); b = env->b_first; } if (a->rp > b->rp) { i += ft_pb(env); a = env->a_first; b = env->b_first; } return (i); }
void ft_algofusion2(t_nb *nb, int list_a[nb->nba], int list_b[nb->nbb]) { if (ft_find_bignb(nb->nbb, list_b) >= ft_middle(nb->nbb)) { while (ft_bignb(nb->nbb, list_b, 0, nb->nbb - 1) == 0) ft_rb(nb, list_b, list_a); ft_pa(nb, list_a, list_b); if (nb->nbinj[nb->i] == 2 && list_a[nb->nba - 1] > list_a[nb->nba - 2]) ft_sa(nb, list_a, list_b); } else if (ft_find_bignb(nb->nbb, list_b) < ft_middle(nb->nbb)) { while (ft_bignb(nb->nbb, list_b, 0, nb->nbb - 1) == 0) ft_rrb(nb, list_b, list_a); ft_pa(nb, list_a, list_b); if (nb->nbinj[nb->i] == 2 && list_a[nb->nba - 1] > list_a[nb->nba - 2]) ft_sa(nb, list_a, list_b); } }
static int ft_algo_ter(t_ps *b, t_env *env) { int i; int biggest_rp; i = 0; b = env->b_first; biggest_rp = ft_biggest_rp(env->b_first); while (b->rp != biggest_rp) { i += ft_rb(env); b = env->b_first; } while (b != NULL) { i += ft_pa(env); b = env->b_first; } return (i); }
void ft_rr(t_lst **a, t_lst **b) { ft_ra(a); ft_rb(b); }