@Sergey_Dultsev

Почему не работает пузырьковая сортировка двумерного динамического массива?

#include <iostream>
#include <ctime>
#include <cmath>

using namespace std;

int ** memory_allocate (int x, int y){ // выделение памяти и создание двумерного динамического массива
    int ** A = new int* [x];
    for( int i = 0; i < x; i++){
        A[i] = new int [y];
    }
    return A;
}

void fill_arr (int **Arr, int x, int y){  // заполнение массива
    cout << "Вывод заполненого массива: ";
    cout << endl;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j  < y; j++) {               
            Arr[i][j] = rand() % 50;
            cout << Arr[i][j] << "\t";
        }
        cout << endl;
    }
}


void result(int **Arr, int x, int y){     // вывод массива
    for (int i = 0; i < x; i++) {
        for (int j = i; j < x; j++) {
            if (Arr[i][j] > Arr[i][j + 1]) {
                int temp = Arr[i][j + 1];
                Arr[i][j] = Arr[i][j];
                Arr[i][j + 1] = temp;
            }
        }
    }
    
    cout << "Вывод сортированного массива: ";
    cout << endl;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j  < y; j++){
            cout << Arr[i][j] << "\t";
        }
        cout << endl;
    }
}

void memory_free (int **Arr, int x) { // освобождение памяти 
    for( int i = 0; i < x; i++){
        free(Arr[i]);
    }
    free(Arr);
}



int main()
{
    srand(time(NULL));
    int lines, columns;
    cout<< "Введите кол-во строк: ";
    cin >> lines;
    cout<< "Введите кол-во столбцов: ";
    cin >> columns;
    
    int **arr = memory_allocate(lines , columns);
    fill_arr(arr, lines, columns);
    result(arr, lines, columns); 
    memory_free(arr, lines);

    return 0;
}
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
1. В result в цикле сортировки вложенный цикл должен быть до y, а у тебя до х, так же как верхний цикл.
2. Как писал mayton2019 для сортировки не хватает дополнительного цикла. Просто сделай сначала сортировку одномерного массива и поймешь зачем он. Сейчас у тебя только одна итерация сортировки для каждой колонки проходит.
3. Посмотри внимательно сюда:
int temp = Arr[i][j + 1];
Arr[i][j] = Arr[i][j];
Arr[i][j + 1] = temp;

И пойми, что этот код ничего местами не меняет. А должен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы