Упорядочить массив в порядке возрастания методом стандартного обмена - 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;
}

Объяснение кода листинга программы

  1. Объявление функции sort_col с двумя аргументами типа float m[N][N] и int col, где N это количество строк в массиве.
  2. Создание переменных j, i, k типа int и float соответственно.
  3. Проверка упорядоченности столбца методом пузырька, где условие выхода из цикла это наличие элемента больше следующего.
  4. Если условие не выполняется, то возвращаем управление в основную программу.
  5. В противном случае начинаем сортировку вставкой для каждой строки начиная со второй.
  6. Внутренний цикл сортировки вставкой, где условие выхода из цикла это нахождение элемента, который больше текущего.
  7. Перемещение элементов, которые больше текущего, вправо до тех пор пока не будет найден элемент, который меньше текущего.
  8. Вставка текущего элемента на свою позицию.
  9. Повторение шагов 6-8 для каждой строки начиная со второй.
  10. Вывод отсортированного массива на экран с помощью цикла for и функции printf.
  11. Возврат 0 в основной программе означает успешный вывод массива.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы