Сортировка строк - ошибка в коде - C (СИ)
Формулировка задачи:
Здравствуйте! Прошу помощи в решении задачи.
Нужно создать функцию для заполнения массива в диапазоне, указанном пользователем, функцию для вывода массива на экран и функцию сортировки каждой строки массива.
Вот код , который у меня получился. Компилируется, но большинстве случаев возникает ошибка при выполнении функции сортировки строк (иногда работает).
#include <iostream>
#include <time.h>
using namespace std;
//Заполнение двумерного массива случайными числами в диапазоне, указанном пользаователем
void create(int mas[][5], int row)
{
int min, max, temp;
cout << "Нижняя граница диапазона:";
cin >> min;
cout << "Верхняя граница диапазона:";
cin >> max;
if (max < min)
{
temp = max;
max = min;
min = temp;
}
for (size_t i = 0; i < row; i++)
{
for (size_t j = 0; j < 5; j++)
{
mas[i][j] = min + rand() % (max - min + 1);
}
}
}
//вывод на экран
void show(int mas[][5], int row)
{
for (size_t i = 0; i < row; i++)
{
for (size_t j = 0; j < 5; j++)
{
cout << "[" << i << "][" << j << "]=\t" << mas[i][j] << "\t";
}
cout << "\n";
}
}
//Сортировка каждой строки
void row(int mas[][5], int row)
{
int temp, obmen, kol = 0;
for (size_t i = 0; i < row - 1; i++)
{
do
{
obmen = 0;
for (size_t j = 0; j < 5 - 1 - kol; j++)
{
if (mas[i][j + 1] < mas[i][j])
{
temp = mas[i][j];
mas[i][j] = mas[i][j + 1];
mas[i][j + 1] = temp;
obmen = 1;
}
}
kol++;
} while (obmen == 1);
}
}
void main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
int array[7][5];
int s = 7;
create(array, s);
show(array, s);
cout << "\n";
row(array, s);
show(array, s);
}Решение задачи: «Сортировка строк - ошибка в коде»
textual
Листинг программы
void row(int mas[][5], int row)
{
int temp, obmen, kol = 0;
for (int i = 0; i < row; i++)
for (int j = 0; j < 4 ; j++)
for (int k =0; k <4; k ++)
if (mas[i][k + 1] < mas[i][k])
{
temp = mas[i][k];
mas[i][k] = mas[i][k + 1];
mas[i][k + 1] = temp;
}
}
Объяснение кода листинга программы
В представленном коде реализована функция сортировки строки (или массива) в порядке возрастания. Список действий, которые происходят в коде:
- В функции объявляются три переменные:
temp,obmenиkol.tempиспользуется для временного хранения значения переменной,obmenиспользуется для обмена значениями переменных, аkolиспользуется для подсчета количества итераций цикла. - Запускается цикл, который проходит по каждой строке (или элементу) массива.
- Внутри этого цикла запускается еще два вложенных цикла. Первый проходит по каждому столбцу (или элементу) строки, а второй по всем элементам, начиная со второго столбца (или элемента).
- Вложенный цикл проверяет, если текущий элемент больше следующего, то происходит обмен их значениями.
- После завершения вложенных циклов, функция завершает свою работу.