Сортировка пузырьком - 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; } } } }
Объяснение кода листинга программы
- Сортировка пузырьком - это алгоритм сортировки, который сравнивает и меняет соседние элементы массива до тех пор, пока массив не будет отсортирован по возрастанию или по убыванию.
- В данном коде используется три вложенных цикла: внешний цикл k, внутренний цикл i и внутренний цикл j.
- Внешний цикл k инициализируется переменной k равной 0 и условием k < m, где m - это количество строк в массиве. Значит, он будет выполняться столько раз, сколько строк в массиве.
- Внутренний цикл i также инициализируется переменной i равной 0 и условием i < m. Он будет выполняться столько раз, сколько столбцов в массиве.
- Внутренний цикл j инициализируется переменной j равной m-1 и условием j > i. Он будет выполняться столько раз, сколько элементов в строке, начиная с последнего элемента.
- В условии внутреннего цикла j проверяется, больше ли элемент array[k][j-1] элемента array[k][j]. Если это так, то выполняется блок кода.
- В блоке кода переменной x присваивается значение array[k][j-1], затем array[k][j-1] присваивается значение array[k][j], а array[k][j] присваивается значение x. Это значит, что элементы массива меняются местами.
- Код внутри внутреннего цикла j выполняется до тех пор, пока j больше i. То есть, пока не будет отсортирован текущий столбец массива.
- После выполнения внутреннего цикла j, переменная i увеличивается на 1 и внутренний цикл i начинается снова для следующей строки массива.
- После выполнения внутреннего цикла i, переменная k увеличивается на 1 и внешний цикл k начинается снова для следующей строки массива.
- В результате выполнения всех циклов, массив будет отсортирован по убыванию.
- Код не содержит ошибок синтаксиса и логики, но для его работы необходимо инициализировать массив array и присвоить ему значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д