I think It work
This commit is contained in:
parent
f4bd2c9432
commit
36a1e52502
4
Makefile
4
Makefile
@ -6,11 +6,11 @@
|
||||
# By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2022/11/28 16:34:37 by cchauvet #+# #+# #
|
||||
# Updated: 2022/11/28 17:17:40 by cchauvet ### ########.fr #
|
||||
# Updated: 2022/11/29 16:23:42 by cchauvet ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
SRCS = ft_swap.c ft_putstr.c ft_p.c ft_sort.c ft_tablen.c ft_get_max.c ft_get_min.c main.c ft_atoi.c ft_bit_finder.c ft_radix.c ft_isnum.c ft_get_bit_max.c ft_r.c
|
||||
SRCS = ft_swap.c ft_putstr.c ft_p.c ft_sort.c ft_tablen.c ft_get_max.c ft_get_min.c main.c ft_atoi.c ft_bit_finder.c ft_radix.c ft_isnum.c ft_get_bit_max.c ft_r.c ft_is_sorted.c ft_get_bit_min.c
|
||||
|
||||
OBJS = ${SRCS:.c=.o}
|
||||
|
||||
|
@ -6,18 +6,29 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/23 17:31:10 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/23 18:35:41 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 15:06:00 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "pushswap.h"
|
||||
|
||||
int ft_bit_finder(int big, int tofind)
|
||||
int ft_bit_finder_left(int big, int tofind)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = (int) sizeof(int) * 8 - 1;
|
||||
while (i > 0 && ((big >> i) & 1) != tofind)
|
||||
while (i != 0 && ((big >> i) & 1) != tofind)
|
||||
i--;
|
||||
return (sizeof(int) * 8 - i - 1);
|
||||
}
|
||||
|
||||
|
||||
int ft_bit_finder_right(int big, int tofind)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i != ((int) sizeof(int) * 8 - 1) && ((big << i) & 1) != tofind)
|
||||
i++;
|
||||
return (i);
|
||||
}
|
||||
|
BIN
ft_bit_finder.o
Normal file
BIN
ft_bit_finder.o
Normal file
Binary file not shown.
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/28 16:22:14 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 17:56:32 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 15:10:54 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -23,7 +23,7 @@ int ft_get_bit_max(int *tab)
|
||||
i = 1;
|
||||
while (tab[i] != -1)
|
||||
{
|
||||
if (ft_bit_finder(tab[i], 1) < ft_bit_finder(max, 1))
|
||||
if (ft_bit_finder_left(tab[i], 1) > ft_bit_finder_left(max, 1))
|
||||
max = tab[i];
|
||||
i++;
|
||||
}
|
||||
|
BIN
ft_get_bit_max.o
Normal file
BIN
ft_get_bit_max.o
Normal file
Binary file not shown.
31
ft_get_bit_min.c
Normal file
31
ft_get_bit_min.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_get_bit_min.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/28 16:22:14 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/29 15:10:03 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "pushswap.h"
|
||||
|
||||
int ft_get_bit_min(int *tab)
|
||||
{
|
||||
int i;
|
||||
int min;
|
||||
|
||||
if (tab[0] == -1)
|
||||
return (INT_MIN);
|
||||
min = tab[0];
|
||||
i = 1;
|
||||
while (tab[i] != -1)
|
||||
{
|
||||
if (ft_bit_finder_right(tab[i], 1) < ft_bit_finder_right(min, 1))
|
||||
min = tab[i];
|
||||
i++;
|
||||
}
|
||||
return (min);
|
||||
}
|
BIN
ft_get_bit_min.o
Normal file
BIN
ft_get_bit_min.o
Normal file
Binary file not shown.
BIN
ft_get_max.o
Normal file
BIN
ft_get_max.o
Normal file
Binary file not shown.
BIN
ft_get_min.o
Normal file
BIN
ft_get_min.o
Normal file
Binary file not shown.
34
ft_is_sorted.c
Normal file
34
ft_is_sorted.c
Normal file
@ -0,0 +1,34 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_is_sorted.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/29 14:41:08 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/29 19:02:34 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "pushswap.h"
|
||||
|
||||
int ft_is_sorted(int *in)
|
||||
{
|
||||
unsigned int *tab;
|
||||
unsigned int prev;
|
||||
unsigned int i;
|
||||
int shift;
|
||||
|
||||
shift = ft_bit_finder_right(ft_get_bit_min(in), 1) - 1;
|
||||
tab = (unsigned int *) in;
|
||||
prev = tab[0];
|
||||
i = 1;
|
||||
while (in[i] != -1)
|
||||
{
|
||||
if (tab[i] >> shift != (prev >> shift) - 1)
|
||||
return (0);
|
||||
prev = tab[i];
|
||||
i++;
|
||||
}
|
||||
return (1);
|
||||
}
|
BIN
ft_is_sorted.o
Normal file
BIN
ft_is_sorted.o
Normal file
Binary file not shown.
BIN
ft_isnum.o
Normal file
BIN
ft_isnum.o
Normal file
Binary file not shown.
10
ft_p.c
10
ft_p.c
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/09 16:38:34 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 18:15:41 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 18:13:28 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -28,12 +28,12 @@ void ft_p(int *tab_src, int *tab_dst)
|
||||
|
||||
void ft_pb(int *tab_a, int *tab_b)
|
||||
{
|
||||
ft_p(tab_b, tab_a);
|
||||
ft_putstr("pb");
|
||||
ft_p(tab_a, tab_b);
|
||||
ft_putstr("pb\n");
|
||||
}
|
||||
|
||||
void ft_pa(int *tab_a, int *tab_b)
|
||||
{
|
||||
ft_p(tab_a, tab_b);
|
||||
ft_putstr("pa");
|
||||
ft_p(tab_b, tab_a);
|
||||
ft_putstr("pa\n");
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/08 18:24:45 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/08 18:26:33 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 14:38:32 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
BIN
ft_putstr.o
Normal file
BIN
ft_putstr.o
Normal file
Binary file not shown.
6
ft_r.c
6
ft_r.c
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/28 16:50:03 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 17:13:21 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 14:39:23 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -26,12 +26,12 @@ static void ft_r(int *tab)
|
||||
|
||||
void ft_ra(int *tab)
|
||||
{
|
||||
ft_putstr("ra");
|
||||
ft_r(tab);
|
||||
ft_putstr("ra\n");
|
||||
}
|
||||
|
||||
void ft_rb(int *tab)
|
||||
{
|
||||
ft_putstr("rb");
|
||||
ft_r(tab);
|
||||
ft_putstr("rb\n");
|
||||
}
|
||||
|
22
ft_radix.c
22
ft_radix.c
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/15 18:16:31 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 16:29:46 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/30 13:19:13 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,18 +16,20 @@ void ft_radix_sort(int *tab_a, int *tab_b)
|
||||
{
|
||||
int i;
|
||||
|
||||
while (ft_bit_finder(ft_get_bit_max(tab_a), 1) != (int) sizeof(int) * 8 - 1)
|
||||
while (!ft_is_sorted(tab_a))
|
||||
{
|
||||
i = 0;
|
||||
while (i < ft_tablen(tab_a))
|
||||
i = ft_tablen(tab_a);
|
||||
while (--i >= 0 && !ft_is_sorted(tab_a))
|
||||
{
|
||||
if (((tab_a[i] >> (sizeof(int) * 8 - 1)) & 1) == 0)
|
||||
ft_ra(tab_a);
|
||||
if ((tab_a[i] >> (sizeof(int) * 8 -1) & 1) == 0)
|
||||
ft_pb(tab_a, tab_b);
|
||||
else
|
||||
ft_ra(tab_a);
|
||||
}
|
||||
while (tab_b[0] != -1)
|
||||
ft_pa(tab_a, tab_b);
|
||||
i++;
|
||||
}
|
||||
while (0 < ft_tablen(tab_b))
|
||||
ft_pb(tab_b, tab_a);
|
||||
i = ft_tablen(tab_a);
|
||||
while (--i >= 0 && !ft_is_sorted(tab_a))
|
||||
tab_a[i] = tab_a[i] << 1;
|
||||
}
|
||||
}
|
||||
|
BIN
ft_radix.o
Normal file
BIN
ft_radix.o
Normal file
Binary file not shown.
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/08 19:47:56 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 18:08:15 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 16:19:48 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -25,7 +25,7 @@ static int *ft_values_simplifier(int *tab, int size)
|
||||
free(tab);
|
||||
return (NULL);
|
||||
}
|
||||
shift = ft_bit_finder(size, 1);
|
||||
shift = ft_bit_finder_left(size, 1);
|
||||
i = 0;
|
||||
while (i < size)
|
||||
{
|
||||
|
BIN
ft_tablen.o
Normal file
BIN
ft_tablen.o
Normal file
Binary file not shown.
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/08 18:19:44 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 16:30:39 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 16:22:26 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,9 +27,12 @@ int ft_get_min_index(int *tab, int len);
|
||||
int ft_get_min_index(int *tab, int len);
|
||||
|
||||
int ft_tablen(int *tab);
|
||||
int ft_is_sorted(int *in);
|
||||
|
||||
int ft_bit_finder(int big, int tofind);
|
||||
int ft_bit_finder_left(int big, int tofind);
|
||||
int ft_bit_finder_right(int big, int tofind);
|
||||
int ft_get_bit_max(int *tab);
|
||||
int ft_get_bit_min(int *tab);
|
||||
void ft_radix_sort(int *tab_a, int *tab_b);
|
||||
|
||||
void ft_swap(int *a, int *b);
|
||||
|
44
test.c
44
test.c
@ -6,7 +6,7 @@
|
||||
/* By: cchauvet <cchauvet@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/11/23 16:43:32 by cchauvet #+# #+# */
|
||||
/* Updated: 2022/11/28 17:15:24 by cchauvet ### ########.fr */
|
||||
/* Updated: 2022/11/29 17:11:41 by cchauvet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,16 +15,38 @@
|
||||
|
||||
int main()
|
||||
{
|
||||
int tab[] = {1,2,3,4,-1};
|
||||
int tab_a[5] = {0,1,2,3,-1};
|
||||
int tab_b[5] = {-1};
|
||||
int i;
|
||||
|
||||
i = -1;
|
||||
while (tab[++i] != -1)
|
||||
printf("%d, ", tab[i]);
|
||||
printf("\n");
|
||||
ft_ra(tab);
|
||||
printf("\n");
|
||||
i = -1;
|
||||
while (tab[++i] != -1)
|
||||
printf("%d, ", tab[i]);
|
||||
i = 0;
|
||||
printf("a: ");
|
||||
while (tab_a[i] != -1)
|
||||
{
|
||||
printf("%d, ", tab_a[i]);
|
||||
i++;
|
||||
}
|
||||
printf("\nb: ");
|
||||
i = 0;
|
||||
while (tab_b[i] != -1)
|
||||
{
|
||||
printf("%d, ", tab_b[i]);
|
||||
i++;
|
||||
}
|
||||
printf("\n");
|
||||
ft_pa(tab_a, tab_b);
|
||||
i = 0;
|
||||
printf("a: ");
|
||||
while (tab_a[i] != -1)
|
||||
{
|
||||
printf("%d, ", tab_a[i]);
|
||||
i++;
|
||||
}
|
||||
printf("\nb: ");
|
||||
i = 0;
|
||||
while (tab_b[i] != -1)
|
||||
{
|
||||
printf("%d, ", tab_b[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user