Упорядочить массив в порядке возрастания методом стандартного обмена - C (СИ)
Формулировка задачи:
Помогите , пожалуйста , решить задачу...
Дана действительная матрица размерности .
Проверить упорядочены ли элементы столбцов матрицы. Если нет, то упорядочить их в по-рядке возрастания методом стандартного обмена
Решение задачи: «Упорядочить массив в порядке возрастания методом стандартного обмена»
textual
Листинг программы
#include <stdio.h>
#define N 4
void sort_col(float m[N][N], int col){
int j, i;
float k;
//проверить упорядочен ли столбец
for(j = i = 0; i < (N - 1); ++i){
if(m[i][col] > m[i + 1][col]){
j = 1;
break;
}
}
if(! j)//столбец упорядочен
return;
//упорядочить столбец сортировкой вставкой
for(j = 1; j < N; ++j){
k = m[j][col];
i = j - 1;
while((i >= 0) && (m[i][col] > k)){
m[i + 1][col] = m[i][col];
--i;
}
m[i + 1][col] = k;
}
}
int main(void){
int i, j;
float m[N][N] = {
{ 2.5f, 5.4f, 9.3f, 7.9f },
{ 0.2f, 3.8f, 4.1f, 8.8f },
{ 1.1f, 7.7f, 9.2f, 0.9f },
{ 3.3f, 0.7f, 9.0f, 2.2f }
};
for(i = 0; i < N; ++i)
sort_col(m, i);
for(i = 0; i < N; ++i){
for(j = 0; j < N; ++j)
printf("%.1f ", m[i][j]);
putchar('\n');
}
return 0;
}
Объяснение кода листинга программы
- Объявление функции sort_col с двумя аргументами типа float m[N][N] и int col, где N это количество строк в массиве.
- Создание переменных j, i, k типа int и float соответственно.
- Проверка упорядоченности столбца методом пузырька, где условие выхода из цикла это наличие элемента больше следующего.
- Если условие не выполняется, то возвращаем управление в основную программу.
- В противном случае начинаем сортировку вставкой для каждой строки начиная со второй.
- Внутренний цикл сортировки вставкой, где условие выхода из цикла это нахождение элемента, который больше текущего.
- Перемещение элементов, которые больше текущего, вправо до тех пор пока не будет найден элемент, который меньше текущего.
- Вставка текущего элемента на свою позицию.
- Повторение шагов 6-8 для каждой строки начиная со второй.
- Вывод отсортированного массива на экран с помощью цикла for и функции printf.
- Возврат 0 в основной программе означает успешный вывод массива.