Не работает сортировка двумерного массива методом простого выбора - 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;
- }
Объяснение кода листинга программы
- Объявляется двумерный массив arr[N][M] размером N на M, где N=3, M=3.
- Вводится исходное значение элементов массива с помощью scanf.
- Выводится исходное значение элементов массива с помощью printf.
- В цикле for происходит сортировка элементов массива по возрастанию.
- Флаг=0, т.е. пока не найден элемент, который меньше текущего.
- Позиция текущего элемента сохраняется в переменной pos.
- Текущий элемент сохраняется в переменной temp.
- В цикле while (k<N) выполняется поиск меньшего элемента, чем temp.
- Если такой элемент найден, то он сохраняется в переменной temp, а позиция этого элемента сохраняется в переменной pos.
- Флаг принимает значение 1.
- Элементы arr[pos][j] и arr[i][j] меняются местами с помощью операций присваивания.
- Цикл while (k<N) завершается.
- Цикл for завершается.
- Выводится отсортированный массив с помощью printf.
- Программа завершается возвратом значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д