Пример #1
0
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);
}
Пример #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);
}
Пример #3
0
void	while_bigger(t_shell *head)
{
	if (where_is_next(head) == 1)
		ft_rb(head, 1);
	else
		ft_rrb(head, 1);
}
Пример #4
0
static int		ft_rr(t_ps *ps)
{
	int		i;

	i = 0;
	i += ft_ra(ps);
	i += ft_rb(ps);
	return (i);
}
Пример #5
0
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);
	}
}
Пример #6
0
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);
}
Пример #7
0
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);
	}
}
Пример #8
0
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);
}
Пример #9
0
void	ft_rr(t_lst **a, t_lst **b)
{
	ft_ra(a);
	ft_rb(b);
}