Отсортировать первую половину массива по возрастанию, а вторую - по убыванию. Использовать сортировку Шелла.*/
Сделал вроде бы правильно, но где-то ошибки. Помогите пожалуйста исправить
#include <iostream>
#include <ctime>
using namespace std;
void ShellSort(int** A, int ROW, int COL);
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
int ROW, COL;
cout << "Введите кол-во строк" << endl;
cin >> ROW;
cout << "Введите кол-во столбцов" << endl;
cin >> COL;
int** A = new int* [ROW];
for (int i = 0; i < ROW; i++)
{
A[i] = new int[COL];
}
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
A[i][j] = rand() % 30;
cout << A[i][j] << " ";
}
cout << endl;
}
ShellSort(A, ROW, COL);
for (int i = 0; i < COL; i++)
{
delete[] A[i];
}
delete[] A;
}
void ShellSort(int** A, int ROW, int COL)
{
int step, temp;
int i, j;
for (int i = 0; i < (ROW * COL); i++)
{
// Выбор шага
for (step = (ROW * COL) / 2; step > 0; step /= 2)
{
// Перечисление элементов, которые сортируются на определённом шаге
for (i = step; i < (ROW * COL); i++)
{
// Перестановка элементов внутри подсписка, пока i-тый не будет отсортирован
for (j = i - step; j >= 0 && A[i, j] > A[i, j + step]; j -= step)
{
if (A[i, j] > A[i, j + 1])
{
temp = A[i, j];
A[i, j] = A[i, j + step];
A[i, j + step] = temp;
//j-=step;
}
if (A[i, j] < A[i, j + 1])
{
temp = A[i, j];
A[i, j] = A[i, j + step];
A[i, j + step] = temp;
}
}
}
}
step = step / 2; //уменьшаем шаг
}
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
cout << A[i][j] << " ";
}
cout << endl;
}
}