The Second and Third Tasks are done
This commit is contained in:
parent
136c9f6b00
commit
69ff8c30a1
31 changed files with 995 additions and 53 deletions
|
@ -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++];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -55,6 +55,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
free(a);
|
||||
free(b);
|
||||
return 3;
|
||||
} while (0);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue