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