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
| #include "sort.h"
#include "info.h"
#include <stdio.h>
int tri_ascii(void *a1, void *b1)
{
char *tmp;
char *a;
char *b;
unsigned int i;
a = (char*)a1;
b = (char*)b1;
i = 0;
while (a[i] == (char)b[i] && a[i] != '\0' && a[i] != '\0')
i++;
if ((b[i] < a[i] && a[i] != '\0') || (b[i] == '\0' && a[i] != '\0'))
return (1);
return (0);
}
void switch_link(t_info **p, t_info **q)
{
t_info *t;
t = (*q)->next;
(*q)->next = t->next;
(*q)->next->prev = (*q);
t->prev = (*p);
t->next = (*p)->next;
(*p)->next->prev = t;
(*p)->next = t;
}
t_info **fusion(t_info **beg, int nb_link_beg, t_info **end,
int nb_link_end)
{
while (1)
{
if (tri_ascii((*beg)->name, (*end)->name) == 1)
{
switch_link(beg, end);
if (nb_link_end == 1)
break ;
nb_link_end--;
}
else
{
if (nb_link_beg == 1)
{
while (nb_link_end >= 1)
{
(*end) = (*end)->next;
nb_link_end--;
}
}
nb_link_beg--;
}
(*beg) = (*beg)->next;
}
return (end);
}
t_info **sort(t_info **lst, int nb_link)
{
int nb_link_deb;
int nb_link_fin;
t_info **lst_sort;
nb_link_fin = nb_link / 2;
nb_link_deb = nb_link - nb_link_fin;
if (nb_link_deb >= 2)
{
lst_sort = sort(lst, nb_link_deb);
if (nb_link_fin >= 2)
lst = sort(lst_sort, nb_link_fin);
}
else
*lst_sort = (*lst)->next;
lst_sort = fusion(lst, nb_link_deb, lst_sort, nb_link_fin);
return (lst_sort);
} |
Partager