Составить алгоритм и программу сортировки элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Составить алгоритм и программу сортировки элементов двумерного квадратного массива размером N (N> 5) по указанным правилам. (Стрелка указывает направление от меньшего к большему элемента). Сначала , думаю, стоит диагональ перевести в одномерный массив и отсортировать его. Потом занести обратно в массив 2-мерный. 2) Начать сортировать в таком порядке : (см. рисунок) Вот так думал решать, и вродь правильно, а отразить в коде не получается.

Решение задачи: «Составить алгоритм и программу сортировки элементов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 9
void pr(int*, int);
void sort(int*, int, int, int);
int main()
{
    int i, j, x, min, temp, A[N][N];
    srand(time(NULL));
    for(i = 0; i < N; i++, putchar('\n'))
        for(j = 0; j < N; j++)
            printf("%3d", A[i][j] = rand() % 54);
    for(i = N - 1; i > 0; i--){
        min = A[i][i];
        x = i;
        for(j = i; j >= 0; j--)
            if(A[j][j] < min){
                min = A[j][j];
                x = j;
        }
        temp = A[i][i];
        A[i][i] = min;
        A[x][x] = temp;
    }
    putchar('\n');
    for(i = 1, j = 2; i < N - 2; i++){
        sort(&A[0][0], i, j, N);
        j++;
        sort(&A[0][0], i, j, N);
    }
 
    putchar('\n');
    pr(&A[0][0], N);
    return 0;
}
void pr(int*arr, int size)
{
    int i;
    for(i = 0; i < size * size; i++){
        if(i != 0 && i % size == 0)
            putchar('\n');
        printf("%3d", *arr);
        arr++;
    }
}
void sort(int*ptr, int row, int col, int size)
{
    int i, j, x, y, k, l, *arr[N], min, temp;
    for(i = 0; i < size; i++)
        arr[i] = ptr + i * size;
    for(k = row, l = col; k > 0 && l < N - 1; k--, l++){
        for(i = k, j = l, min = arr[i][j], x = i, y = j; i >= 0 && j < N; i--, j++){
            if(min > arr[i][j]){
                min = arr[i][j];
                x = i;
                y = j;
            }
        }
        temp = arr[k][l];
        arr[k][l] = min;
        arr[x][y] = temp;
    }
}

Объяснение кода листинга программы

  1. Объявлены массив A размером NxN и переменные i, j, x, min, temp, srand(time(NULL));
  2. В цикле заполняют массив A случайными числами от 0 до 53
  3. Начинают сортировку с внутреннего квадрата массива (i=N-1, j=N-1) и двигаются к внешнему квадрату (i=0, j=0)
  4. Во внутреннем цикле ищут минимальный элемент в строке и запоминают его и его индексы
  5. Меняют местами минимальный элемент с элементом в правом верхнем углу массива
  6. Во внешнем цикле двигаются к следующему внутреннему квадрату (i=N-2, j=N-2)
  7. Продолжают сортировку пока не отсортируют весь массив
  8. Выводят отсортированный массив на экран
  9. В функции pr выводят массив на экран
  10. В функции sort сортируют массив внутри заданного квадрата (i=row, j=col) по заданному направлению (k=row, l=col)
  11. Внутренний цикл определяет минимальный элемент в строке и запоминает его и его индексы
  12. Меняют местами минимальный элемент с элементом в правом верхнем углу массива
  13. Продолжают сортировку пока не отсортируют весь массив внутри заданного квадрата

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы