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