Example #1
0
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);
}
Example #2
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);
}
Example #3
0
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');
}
Example #4
0
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);
}
Example #5
0
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);
	}
}
Example #6
0
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');
}