/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ps_specsort.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/16 13:18:14 by tmaze #+# #+# */ /* Updated: 2019/03/16 13:28:12 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "push_swap.h" static void get_min_max(t_psdata *data, int *min_max, int *ind_min_max) { t_stack *ptr; int i; min_max[0] = FT_INT_MAX; min_max[1] = FT_INT_MIN; ptr = data->a; i = 0; while (ptr) { if (ptr->nb < min_max[0] && (ind_min_max[0] = i) == i) min_max[0] = ptr->nb; if (ptr->nb > min_max[1] && (ind_min_max[1] = i) == i) min_max[1] = ptr->nb; i++; ptr = ptr->next; } } void sortfor3(t_psdata *data) { int min_max[2]; int ind_min_max[2]; get_min_max(data, min_max, ind_min_max); while (ind_min_max[0] != 0 || ind_min_max[1] != 2) { if (ind_min_max[0] == ind_min_max[1] - 1) ft_printf("sa\n"); if (ind_min_max[0] == ind_min_max[1] - 1) ps_swap(data, 'a'); if (ind_min_max[1] == 0) ft_printf("ra\n"); if (ind_min_max[1] == 0) ps_rot(data, 'a'); if (ind_min_max[0] == 2 && ind_min_max[1] == 1) ft_printf("rra\n"); if (ind_min_max[0] == 2 && ind_min_max[1] == 1) ps_rerot(data, 'a'); get_min_max(data, min_max, ind_min_max); } } void sortfor5(t_psdata *data) { ft_printf("pb\n"); ps_push(data, 'b'); ft_printf("pb\n"); ps_push(data, 'b'); if (data->b->nb > data->b->next->nb) ft_printf("sb\n"); if (data->b->nb > data->b->next->nb) ps_swap(data, 'b'); sortfor3(data); data->b->ind = 1; data->b->next->ind = 1; data->a->ind = 2; data->a->next->ind = 2; data->a->next->next->ind = 2; while (data->a->ind == 2 || data->size_b > 0) { if (data->a->ind != 2 || (data->b && data->b->nb < data->a->nb)) ft_printf("pa\n"); if (data->a->ind != 2 || (data->b && data->b->nb < data->a->nb)) ps_push(data, 'a'); data->a->ind = 3; ft_printf("ra\n"); ps_rot(data, 'a'); } }