Сортировка пузырьком - 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 и присвоить ему значения.