The Second and Third Tasks are done

This commit is contained in:
AZEN-SGG 2025-03-02 22:37:25 +03:00
parent 136c9f6b00
commit 69ff8c30a1
31 changed files with 995 additions and 53 deletions

View file

@ -1,47 +0,0 @@
#include "solve.h"
#include "array.h"
void t8_solve(char **a, char **b, int n, int (*cmp)(const char *, const char *))
{
int i = 2, j, margin;
do {
int hf_i = i/2;
for (j = 0; j < n; j += i)
{
if (n < j+i)
{
margin = n-(j+hf_i);
if (margin <= 0) break;
} else margin = hf_i;
unite(a+j, a+(j+hf_i), b, hf_i, margin, cmp);
for (int k = 0; k < hf_i+margin; k++) a[i+j] = b[i];
}
printf("\ni: %d:\n", i);
print_array(a, n, n);
i *= 2;
} while (i < n);
}
void unite(char **arr_a, char **arr_b, char **arr_c, int n, int m, int (*cmp)(const char *, const char *))
{
int i, j, k, cntr, len = n + m; // cntr - contrast
for (i = 0, j = 0, k = 0; k < len; ++k)
{
if (i >= n)
{
arr_c[k] = arr_b[j++];
} else if (j >= m)
{
arr_c[k] = arr_a[i++];
} else
{
cntr = cmp(arr_a[i], arr_b[j]);
if (cntr <= 0) arr_c[k] = arr_a[i++];
else arr_c[k] = arr_b[j++];
}
}
}

View file

@ -55,6 +55,7 @@ int main(int argc, char *argv[])
break;
}
free(a);
free(b);
return 3;
} while (0);