-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.c
136 lines (129 loc) · 3.33 KB
/
helpers.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* helpers.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ycanga <ycanga@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/12 22:12:07 by ycanga #+# #+# */
/* Updated: 2022/10/12 22:12:08 by ycanga ### ########.fr */
/* */
/* ************************************************************************** */
#include "push_swap.h"
/**
* En büyük sayı birinci konumdaysa, yığını ikinci en büyük sayı gelene kadar döndürün.
* ilk konumda, ardından ilk iki sayıyı değiştirin. En büyük sayı ikinci ise
* konumuna getirin, yığını en küçük sayı ilk konuma gelene kadar döndürün, ardından ilkini değiştirin
* iki sayı. En büyük sayı üçüncü konumdaysa, ilk iki sayıyı değiştirin
*
* @param bir yığın
*/
void ft_swap_trois(t_stack *a)
{
if (a->array[0] > a->array[1] && a->array[0] > a->array[2])
{
if (a->array[1] < a->array[2])
ft_rra(a, 2);
else
{
ft_sa(a);
ft_rra(a, 1);
}
}
else if (a->array[1] > a->array[0] && a->array[1] > a->array[2])
{
if (a->array[0] > a->array[2])
ft_rra(a, 1);
else
{
ft_rra(a, 1);
ft_sa(a);
}
}
else if (a->array[2] > a->array[1] && a->array[2] > a->array[0])
if (a->array[1] < a->array[0])
ft_sa(a);
}
/**
* Son eleman en küçükse, yığını bir kez döndürün. Son eleman en büyükse, değiştirin
* ilk iki element. Son eleman ortadaysa, son elemanı ikinciye itin.
* yığın, ilk iki öğeyi değiştirin ve son öğeyi ilk yığına geri itin
*
* @param a ilk yığın
* @param b ittiğimiz yığın
*/
void ft_swap_quatre(t_stack *a, t_stack *b)
{
ft_pb(a, b, 1);
ft_swap_trois(a);
ft_pa(a, b, 1);
ft_ra(a, 1);
if (a->array[3] > a->array[1])
{
if (a->array[3] < a->array[2])
{
ft_pb(a, b, 2);
ft_sa(a);
ft_pa(a, b, 2);
}
}
else
{
if (a->array[3] < a->array[0])
ft_rra(a, 1);
else
{
ft_rra(a, 1);
ft_sa(a);
}
}
}
/**
* Yığındaki en küçük sayıyı bulur, en üste taşır, sonra sıralayan işlevi çağırır.
* ilk dört sayı
*
* @param a ilk yığın
* @param b ittiğimiz yığın
*/
void ft_swap_cinq(t_stack *a, t_stack *b)
{
int i;
int index;
int min;
i = 0;
index = 0;
min = a->array[0];
while (i < a->size)
{
if (a->array[i] < min)
{
index = i;
min = a->array[i];
}
i++;
}
if (a->size / 2 <= index)
while (a->array[0] != min)
ft_rra(a, 1);
else
while (a->array[0] != min)
ft_ra(a, 1);
ft_pb(a, b, 1);
ft_swap_quatre(a, b);
ft_pa(a, b, 1);
}
/**
* Yığını sıralar, ardından en küçük öğeyi yığının en üstüne iter
*
* @param a ilk yığın
* @param b sıralanacak yığın
*/
void ft_sort_plus(t_stack *a, t_stack *b)
{
int *tab;
tab = ft_sort_index(a);
ft_make_index(a, tab);
free(tab);
ft_push_b(a, b);
ft_push_a(a, b);
}