Не работает сортировка двумерного массива методом простого выбора - C (СИ)

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

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

Написал программу сортировки двумерного массива методом простого выбора, но она работает не правильно.. помогите, отредактируйте плиз.. Нужно что бы сортировались элементы столбца по возрастанию.. Заранее большое спасибо =)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N  3
#define M  3

void main()
{
    int*arr[N][M];
    int len,i,j,min,imin,k;
    printf("vvedite elementi massiva\n");
    for (i = 0; i < N; ++i)
      for (j = 0; j < M; ++j)
      {
         scanf("%i",&arr[i][j]);
      }
    for (i = 0; i < N; ++i)
      {
         for (j = 0; j < M; ++j)
         {
            printf("%3d", arr[i][j]);
         }
         printf("\n");
      }
      printf("\n\n");
      for(j=0;j<M;j++)
      {
         for(i=0;i<N;i++)
         {
             min=arr[0][j];
             imin=0;
             for(k=i;k<N;k++)
          {
              if(arr[k][j]<min)
            {
                min=arr[k][j];
                imin=k;
            }
          }
          if(imin!=i)
          {
             arr[imin][j]=arr[i][j];
             arr[i][j]=min;
          }
         }
      }
        for (i = 0; i < N; ++i)
      {
         for (j = 0; j < M; ++j)
         {
            printf("%3d", arr[i][j]);
         }
         printf("\n");
      }

}

Решение задачи: «Не работает сортировка двумерного массива методом простого выбора»

textual
Листинг программы
#include <stdio.h>
 
#define N 3
#define M 3
 
int main(void)
{
   int arr[N][M];
   int i, j, k, temp, pos, flag;
 
   printf("vvedite elementi massiva\n");
   for (i=0; i<N; ++i)
      for (j=0; j<M; ++j)
         scanf("%i", &arr[i][j]);
   for (i=0; i<N; ++i)
   {
      for (j=0; j<M; ++j)
         printf("%3d ", arr[i][j]);
      printf("\n");
   }
   for (j=0; j<M; ++j)
      for (i=0; i<N-1; ++i)
      {
         flag = 0;
         pos = i;
         temp = arr[i][j];
         for (k=i+1; k<N; ++k)
            if (arr[k][j] < temp)
            {
               pos = k;
               temp = arr[k][j];
               flag = 1;
            }
         if(flag)
         {
            arr[pos][j] = arr[i][j];
            arr[i][j] = temp;
         }
      }
 
   printf("\n");
   for (i=0; i<N; ++i)
   {
      for (j=0; j<M; ++j)
         printf("%3d ", arr[i][j]);
      printf("\n");
   }
 
   return 0;
}

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

  1. Объявляется двумерный массив arr[N][M] размером N на M, где N=3, M=3.
  2. Вводится исходное значение элементов массива с помощью scanf.
  3. Выводится исходное значение элементов массива с помощью printf.
  4. В цикле for происходит сортировка элементов массива по возрастанию.
  5. Флаг=0, т.е. пока не найден элемент, который меньше текущего.
  6. Позиция текущего элемента сохраняется в переменной pos.
  7. Текущий элемент сохраняется в переменной temp.
  8. В цикле while (k<N) выполняется поиск меньшего элемента, чем temp.
  9. Если такой элемент найден, то он сохраняется в переменной temp, а позиция этого элемента сохраняется в переменной pos.
  10. Флаг принимает значение 1.
  11. Элементы arr[pos][j] и arr[i][j] меняются местами с помощью операций присваивания.
  12. Цикл while (k<N) завершается.
  13. Цикл for завершается.
  14. Выводится отсортированный массив с помощью printf.
  15. Программа завершается возвратом значения 0.

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


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

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

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