summaryrefslogtreecommitdiff
path: root/optimization.c
blob: f1eca7e6dbf06ab9823e80fbbb2649a7c5a3c0b7 (plain)
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
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   optimization.c                                     :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2024/04/13 15:25:05 by dkaiser           #+#    #+#             */
/*   Updated: 2024/04/13 16:27:05 by dkaiser          ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "libft/ft_printf.h"
#include "libft/libft.h"
#include "push_swap.h"
#include <stdlib.h>

static void sort_array(int size, int *tmp_array)
{
    int i;
    int k;
    int tmp;

    i = 0;
    while (i < size - 1)
    {
        k = i + 1;
        while (k < size)
        {
            if (tmp_array[i] > tmp_array[k])
            {
                tmp = tmp_array[i];
                tmp_array[i] = tmp_array[k];
                tmp_array[k] = tmp;
            }
            k++;
        }
        i++;
    }
}

static void override_stack(t_list **stack, int *tmp_array)
{
    t_list *cur;
    int content;
    int i;

    cur = *stack;
    while (cur)
    {
        i = 0;
        content = *(int*)cur->content;
        while (content != tmp_array[i])
            i++;
        *(int*)cur->content = i;
        cur = cur->next;
    }
}

void stack_optimize(t_list **stack)
{
    int size;
    int *tmp_array;
    t_list *cur;
    int i;

    size = ft_lstsize(*stack);
    cur = *stack;
    tmp_array = malloc(size * sizeof(int));
    if (!tmp_array)
        ; // TODO: Error handling
    i = 0;

    while(cur)
    {
        tmp_array[i++] = *(int*)cur->content;
        cur = cur->next;
    }
    if (i != size)
        ; // TODO: Error handling
    sort_array(size, tmp_array);
    i = 0;
    override_stack(stack, tmp_array);
}