Не работает сортировка двумерного массива методом простого выбора - 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.