Составить алгоритм и программу сортировки элементов - 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)
- Внутренний цикл определяет минимальный элемент в строке и запоминает его и его индексы
- Меняют местами минимальный элемент с элементом в правом верхнем углу массива
- Продолжают сортировку пока не отсортируют весь массив внутри заданного квадрата
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д