int main(int ac, char **av) { t_swap *ba; t_swap *bb; int op; op = ft_check_params(ac, av); ba = ft_creat_list(ac - 1, av); bb = NULL; if (op) { ft_sorted(ba) ? write(1, "fini", 4) : ft_putstr("start"); ft_print_list(ba, 1); ft_print_list(bb, 0); } if (ft_sorted(ba)) return (0); call_algo(&ba, &bb, (ac - 1), av); if (op) { ft_putstr("fini"); ft_print_list(ba, 1); ft_print_list(bb, 0); } 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 ft_algo_sort_s(t_swap **ba, unsigned int i) { int min; min = (*ba)->data; while (!ft_sorted(*ba)) { if ((*ba)->data > (*ba)->next->data) { sa(ba); ft_putstr("sa "); ft_print_param(ba, i, 0); if (min > (*ba)->data) min = (*ba)->data; while (min != (*ba)->data) { rra(ba); ft_putstr("rra "); ft_print_param(ba, i, 0); } } else ft_print_param(ba, i, 1); } ft_putchar('\n'); }
void rempile(t_shell *head) { if (l_nb(head->sa) > head->sa->nb) ft_rra(head, 1); while (l_len(head->sb) > 1) { if (l_len(head->sb) > 2 && head->sb->nb > head->sb->n->nb && head->sb->nb > head->sb->n->n->nb) rb_or_rr(head); while (is_bigger(head->sa, head->sb->nb, head->min)) while_bigger(head); ft_pa(head, 1); if (head->sa->nb > head->sa->n->nb && head->sa->n->nb != head->min) { if (l_len(head->sb) > 1 && head->sb->nb > head->sb->n->nb) ft_ss(head, 1); else ft_sa(head, 1); } while (is_smallest(head->sb, head->sa->nb) && !ft_sorted(head->sa)) while_smallest(head); } ft_pa(head, 1); if (head->sa->nb > head->sa->n->nb && head->sa->n->nb != head->min) ft_sa(head, 1); ft_ra(head, 1); }
void which_swap(t_shell *head) { if (l_len(head->sa) >= 40) push_swap(head, INT_MIN, 0, 0); else { while (ft_sorted(head->sa) == 0) small_swap(head); } }
void call_algo(t_swap **ba, t_swap **bb, int ac, char **av) { void *tmp; unsigned int i; tmp = ft_pt_op(); i = 0; ft_algo(tmp, ba, bb, i); while ((!*ba || !ft_sorted(*ba) || *bb) && i <= 5000000) { *ba = ft_creat_list(ac, av); *bb = NULL; ft_algo(tmp, ba, bb, ++i); } *ba = ft_creat_list(ac, av); *bb = NULL; if (i > 5000000 && !ft_sorted(*ba)) return (ft_algo_sort_s(ba, !ft_strcmp(av[1], "-v") ? 1 : 0)); ft_put_sol(i, !ft_strcmp(av[1], "-v") ? 1 : 0, ba, bb); ft_putchar('\n'); }