Составить алгоритм и программу сортировки элементов - 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; } }
Объяснение кода листинга программы
- Объявлены массив A размером NxN и переменные i, j, x, min, temp, srand(time(NULL));
- В цикле заполняют массив A случайными числами от 0 до 53
- Начинают сортировку с внутреннего квадрата массива (i=N-1, j=N-1) и двигаются к внешнему квадрату (i=0, j=0)
- Во внутреннем цикле ищут минимальный элемент в строке и запоминают его и его индексы
- Меняют местами минимальный элемент с элементом в правом верхнем углу массива
- Во внешнем цикле двигаются к следующему внутреннему квадрату (i=N-2, j=N-2)
- Продолжают сортировку пока не отсортируют весь массив
- Выводят отсортированный массив на экран
- В функции pr выводят массив на экран
- В функции sort сортируют массив внутри заданного квадрата (i=row, j=col) по заданному направлению (k=row, l=col)
- Внутренний цикл определяет минимальный элемент в строке и запоминает его и его индексы
- Меняют местами минимальный элемент с элементом в правом верхнем углу массива
- Продолжают сортировку пока не отсортируют весь массив внутри заданного квадрата
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д