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

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

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

Написал программу сортировки двумерного массива методом простого выбора, но она работает не правильно.. помогите, отредактируйте плиз.. Нужно что бы сортировались элементы столбца по возрастанию.. Заранее большое спасибо =)
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 3
  5. #define M 3
  6.  
  7. void main()
  8. {
  9. int*arr[N][M];
  10. int len,i,j,min,imin,k;
  11. printf("vvedite elementi massiva\n");
  12. for (i = 0; i < N; ++i)
  13. for (j = 0; j < M; ++j)
  14. {
  15. scanf("%i",&arr[i][j]);
  16. }
  17. for (i = 0; i < N; ++i)
  18. {
  19. for (j = 0; j < M; ++j)
  20. {
  21. printf("%3d", arr[i][j]);
  22. }
  23. printf("\n");
  24. }
  25. printf("\n\n");
  26. for(j=0;j<M;j++)
  27. {
  28. for(i=0;i<N;i++)
  29. {
  30. min=arr[0][j];
  31. imin=0;
  32. for(k=i;k<N;k++)
  33. {
  34. if(arr[k][j]<min)
  35. {
  36. min=arr[k][j];
  37. imin=k;
  38. }
  39. }
  40. if(imin!=i)
  41. {
  42. arr[imin][j]=arr[i][j];
  43. arr[i][j]=min;
  44. }
  45. }
  46. }
  47. for (i = 0; i < N; ++i)
  48. {
  49. for (j = 0; j < M; ++j)
  50. {
  51. printf("%3d", arr[i][j]);
  52. }
  53. printf("\n");
  54. }
  55.  
  56. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. #define N 3
  4. #define M 3
  5.  
  6. int main(void)
  7. {
  8.    int arr[N][M];
  9.    int i, j, k, temp, pos, flag;
  10.  
  11.    printf("vvedite elementi massiva\n");
  12.    for (i=0; i<N; ++i)
  13.       for (j=0; j<M; ++j)
  14.          scanf("%i", &arr[i][j]);
  15.    for (i=0; i<N; ++i)
  16.    {
  17.       for (j=0; j<M; ++j)
  18.          printf("%3d ", arr[i][j]);
  19.       printf("\n");
  20.    }
  21.    for (j=0; j<M; ++j)
  22.       for (i=0; i<N-1; ++i)
  23.       {
  24.          flag = 0;
  25.          pos = i;
  26.          temp = arr[i][j];
  27.          for (k=i+1; k<N; ++k)
  28.             if (arr[k][j] < temp)
  29.             {
  30.                pos = k;
  31.                temp = arr[k][j];
  32.                flag = 1;
  33.             }
  34.          if(flag)
  35.          {
  36.             arr[pos][j] = arr[i][j];
  37.             arr[i][j] = temp;
  38.          }
  39.       }
  40.  
  41.    printf("\n");
  42.    for (i=0; i<N; ++i)
  43.    {
  44.       for (j=0; j<M; ++j)
  45.          printf("%3d ", arr[i][j]);
  46.       printf("\n");
  47.    }
  48.  
  49.    return 0;
  50. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы