Bubble sorting 2d array - PullRequest
       1

Bubble sorting 2d array

0 голосов
/ 26 мая 2018

Я пытаюсь отсортировать 2-мерный массив, используя алгоритм пузырьковой сортировки, и у меня постоянно возникают проблемы.Что мне нужно сделать, это создать двумерный массив случайных чисел 10-90 и найти самые большие элементы из каждой строки после того, как сортировать этот список самых больших элементов в порядке возрастания, используя Bubble sort.Я сделал, пока не нашел самый большой элемент из каждой строки, но я не могу отсортировать этот список.Список самых больших элементов сохраняется в переменной с именем max.Как я могу отсортировать этот список с помощью пузырьковой сортировки.Любая помощь будет оценена.

Ниже я попробовал:

// Напишите программу, которая заполняет значения двумерного массива A [N, M] случайными числами от 10 до 90 иопределяет наибольшее значение в каждой строке.// Строки с наибольшим значением элемента располагаются в порядке возрастания, используя алгоритм сортировки «Пузырь».N и M вводятся пользователем.

int i,j,rows, columns, temp, swapped;
cout<<"How many rows? ";
cin>> rows;
cout<< "how many columns? ";
cin>>columns;

int array[rows][columns];

for(i = 0; i<rows; i++){
    for(j=0; j<columns; j++){
        array[i][j] = rand()%90+10;
    }cout<<endl;
}

for(i = 0; i<rows; i++){
    for(j=0; j<columns; j++){
        cout<<array[i][j]<<" ";
    }
    cout<<endl;
}
for(i=0;i<rows;i++){

int max=array[i][0];

    for(j=0;j<columns;j++){

        if(max  <  array[i][j]){

        max = array[i][j];
    }

    }
        cout<<"Largest element in row" << i << "is: "<< max << endl;
}



    for(i=0; i<rows;rows++){

for(j=0; j<columns; j++){
    if(max > max+[1]){
        temp = max;
        max = max+[1];
        max+[1] = temp;

    }
}
    }



    for(i=0; i<rows;rows++){
for(j=0; j<columns; j++){
    cout<< max << endl; 
}

}

return 0 ;

}

1 Ответ

0 голосов
/ 26 мая 2018

Похоже, у вас проблемы с пониманием работы массивов и циклов.Сначала прочитайте эту статью о loops , затем эту статью о многомерных массивах .Теперь, что касается вашего кода:

for (i = 0; i < rows - 1; rows++) {

Что вы на самом деле здесь делаете, это инкриминирующая переменная rows, которая хранит количество строк в вашем array[rows][columns].В результате ваш цикл не работает должным образом.Чтобы пройти через массив, вам нужно указать переменную i, чтобы вы могли обращаться к элементам массива, используя индекс в квадратных скобках.

Например: вызов array[i], в то время как i = 3 вернет вам четвертый элемент массива.(поскольку массивы начинаются с 0)

Теперь сортировка.Вы пытаетесь использовать цикл while (1), который является бесконечным, и разрыв, который никогда не будет выполняться должным образом.

Сортировка двумерного массива фактически сортирует x одномерные массивы.Итак, вам нужно реализовать простую пузырьковую сортировку для одномерного массива и обернуть ее дополнительным циклом for, чтобы пройти через ряды желобов.

int m;
int temp;
for (i = 0; i < rows; i++) { // this will "switch" actual rows
    for (j = 0; j < columns; j++) { // this will traverse through elements
        for (m = 0; m < columns - 1; m++) {   // this will traverse just like the 
            if (array[i][j] > array[i][m]) {  // previous loop, but one element 
               temp = array[i][j];            // ahead, so you can compare them 
               array[i][j] = array[i][m];
               array[i][m] = temp;   // swapping elements array[row][element] 
                                     // with array[row][one element ahead]
            }
        }
    }
}

UPD:

Для отображениямассив элементов max, сначала создайте массив, в котором вы будете хранить ваши значения max.Для моего фрагмента это int array_max[rows].Он запишет ваши максимальные значения по мере их нахождения.Чтобы сделать это, добавьте: (где вы этот cout был)

cout << "Largest element in row" << i << "is: " << max << endl;
        array_max[i] = max;

А теперь, чтобы отсортировать новый массив и правильно распечатать его, попробуйте это:

for (i = 0; i < rows; i++) {
    for (j = 0; j < rows - 1; j++) {
        if (array_max[i] > array_max[j]) {
           temp = array_max[i];
           array_max[i] = array_max[j];
           array_max[j] = temp;
        }
    }
}

for (i = 0; i < rows; i++) {
        cout << array_max[i] << " ";
}

И, наконец,добавьте #include <ctime> в ваш проект, чтобы получать новые случайные значения при каждом запуске вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...