Сортировка пузырьком - C (СИ) (73182)

Узнай цену своей работы

Формулировка задачи:

Уже перепробовал кучу вариантов, никак не могу наладить программу, помогите пожалуйста с сортировкой, и если найдете другие ошибки буду благодарен) Вот код:
#include <stdio.h> 
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
#include <iostream>
#include <locale.h>
 
int main(void)
{
    int i, j, m, tmp;
    int status;
    double **array;
    double q = 0;
    int  flag = 0;
setlocale(LC_ALL,"Russian");
 
    printf("Введите размерность матрицы : ");
    status = scanf("%d",&m);
    if (status!=1)
        return 0;

// Выделение памяти
    array = (double**) malloc(m * sizeof(double*));
    if (array==NULL)
    {
        fprintf(stderr,"Не удалось выделить память\n");
        exit(EXIT_FAILURE);
    }
    for (i=0; i<m; i++)
    {
        array[i] = (double*) malloc(m * sizeof(double));
        if (array[i]==NULL)
         {
            fprintf(stderr,"Не удалось выделить память\n");
                        
            for(tmp=0; tmp<i; tmp++)
                free(array[tmp]);
            free(array);
            exit(EXIT_FAILURE);
        }
     }
     
// Ввод матрицы
    printf("Введите элементы матрицы:");
        for (i=0; i<m; i++)
        {
            for (j=0; j<m; j++)
            {
                printf("(%d,%d) ", i+1, j+1);
                scanf("%4d", &array[i][j]);
            }
        }
 
//Сортировка
for ( i=0; i<m; i++) 
{ 
           for ( j=0; j<m; j++) 
           {
                  if(array[i][j] > array[i][j+1])
                    {
                        q = array[i][j];
                        array[i][j] = array[i][j+1];
                        array[i][j+1] = q;
                  }
             }
}
}
 
// Вывод матрицы
    for (i=0; i<m; i++)
    {
        printf("\n");
        for (j=0; j<m; j++)
            printf("%d", array[i][j]);
    }
 
    printf("\n\n");
        
    for (i=0; i<m; i++)
    {
        free(array[i]);
    }
    free(array);
    return 0;
}

Решение задачи: «Сортировка пузырьком»

textual
Листинг программы
for (int k = 0; k< m; k++{
    for (int i = 0; i < m; i++) { 
        for (int j = m - 1; j>i; j--){  
            if (array[k][j - 1] > array[k][j]) {
                int x = array[k][j - 1];
                array[k][j - 1] = array[k][j];
                array[k][j] = x;
            }
        }
    }
}

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

  1. Сортировка пузырьком - это алгоритм сортировки, который сравнивает и меняет соседние элементы массива до тех пор, пока массив не будет отсортирован по возрастанию или по убыванию.
  2. В данном коде используется три вложенных цикла: внешний цикл k, внутренний цикл i и внутренний цикл j.
  3. Внешний цикл k инициализируется переменной k равной 0 и условием k < m, где m - это количество строк в массиве. Значит, он будет выполняться столько раз, сколько строк в массиве.
  4. Внутренний цикл i также инициализируется переменной i равной 0 и условием i < m. Он будет выполняться столько раз, сколько столбцов в массиве.
  5. Внутренний цикл j инициализируется переменной j равной m-1 и условием j > i. Он будет выполняться столько раз, сколько элементов в строке, начиная с последнего элемента.
  6. В условии внутреннего цикла j проверяется, больше ли элемент array[k][j-1] элемента array[k][j]. Если это так, то выполняется блок кода.
  7. В блоке кода переменной x присваивается значение array[k][j-1], затем array[k][j-1] присваивается значение array[k][j], а array[k][j] присваивается значение x. Это значит, что элементы массива меняются местами.
  8. Код внутри внутреннего цикла j выполняется до тех пор, пока j больше i. То есть, пока не будет отсортирован текущий столбец массива.
  9. После выполнения внутреннего цикла j, переменная i увеличивается на 1 и внутренний цикл i начинается снова для следующей строки массива.
  10. После выполнения внутреннего цикла i, переменная k увеличивается на 1 и внешний цикл k начинается снова для следующей строки массива.
  11. В результате выполнения всех циклов, массив будет отсортирован по убыванию.
  12. Код не содержит ошибок синтаксиса и логики, но для его работы необходимо инициализировать массив array и присвоить ему значения.

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


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

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

9   голосов , оценка 3.444 из 5