Другие языки программирования и технологии

отсортировать рандомную матрицу змейкой Язык СИ

с помощью сортировки отбором или вставкой и через выделение памяти (malloc,calloc) отсортировать рандомную матрицу змейкой, такая, чтобы закручивалась к центру в центре в итоге самое мало число??
Qarib Novruzlu
Qarib Novruzlu
91
#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, **a, **p, pc, r, c;
    srand(time(NULL));
    printf("размерность матрицы? ");
    scanf("%d", &n);
    printf("матрица:\n");
    a = malloc(n * sizeof(a[0]));
    for (r = 0; r < n; ++r) {
        a[r] = malloc(n * sizeof a[0][0]);
        for (c = 0; c < n; ++c) printf("%""4d ", a[r][c] = rand() % 100);
        putchar('\n');
    }
    p = malloc(n * n * sizeof p[0]);
    pc = 0;
    for (r = 0; r < n / 2; ++r) {
        for (c = r; c < n - r - 1; ++c) p[pc++] = &a[r][c];
        for (c = r; c < n - r - 1; ++c) p[pc++] = &a[c][n - r - 1];
        for (c = n - r - 1; c > r; --c) p[pc++] = &a[n - r - 1][c];
        for (c = n - r - 1; c > r; --c) p[pc++] = &a[c][r];
    }
    if (n % 2) p[pc++] = &a[n / 2][n / 2];
    putchar('\n');
    for (r = 0; r < n * n - 1; ++r) {
        int m = r;
        for (c = r + 1; c < n * n; ++c) if (*p[c] > *p[m]) m = c;
        if (m != r) {
            int t = *p[r];
            *p[r] = *p[m];
            *p[m] = t;
        }
    }
    free(p);
    for (r = 0; r < n; ++r) {
        for (c = 0; c < n; ++c) printf("%""4d ", a[r][c]);
        putchar('\n');
        free(a[r]);
    }
    free(a);
    return 0;
}
ВР
Владимир Рыбалкин
94 505
Лучший ответ