Форум программистов, компьютерный форум CyberForum.ru

Сортировка методом пузырька, не могу найти ошибку - C++

Восстановить пароль Регистрация
 
Бедел
 Аватар для Бедел
232 / 28 / 4
Регистрация: 04.06.2010
Сообщений: 283
09.07.2013, 03:15     Сортировка методом пузырька, не могу найти ошибку #1
Здравствуйте, уважаемые форумчане !
Столкнулся с проблемой при выполнении 2-го условия.

Дана целочисленная прямоугольная матрица (задать самостоятельно).
1. Найдите наименьший элемент среди четных строк этой матрицы.
2. Переставьте местами строки матрицы в порядке убывания модулей первых элементов строк.

Ввожу двумерный массив 3х3, например: 4 5 6 7 8 9 1 1 3
Сортирует не совсем верно. На скрине приведены два теста.
Сортировка методом пузырька, не могу найти ошибку

Откуда он берет эту злосчастную тройку ? Никак не могу понять. Есть подозрения, что это каким-то образом связано с число столбцов и строк, так как их тоже ровно 3. Меняю число строк и столбцов на 4, появляются лишние 4-ки... Причем сортирует неверно, когда строка является ПОСЛЕДНЕЙ. Вот все закономерности, которые я заметил, но решить проблему никак не могу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <iomanip.>
#include <stdlib.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int a = 3, b = 3;
    int m[a][b], i, j;
    cout << "Ввод массива: ";
    for (i=0; i<a; i++)
        for (j=0; j<b; j++)
            cin >> m[i][j];
    for (i=0; i<a; i++)
    {
     for (j=0; j<b; j++)
        cout << setw(2) << m[i][j] << " ";
     cout << endl;
    }
    int mini=m[0][0];
    for (i=1; i<a; i+=2)
    {
      for (j=0; j<b; j++)
      {
        if (mini>=m[i][j+i]) mini=m[i][j+1];
      }
    }
        cout << "Минимальный элемент четных строк= " << mini << endl;
    int x,k;
    for (j=0; j<b-1; j++)
    {
        for (i=0; i<a-j; i++)
        {
          if (abs(m[i][0]) < abs(m[i+1][0]))
            {
                for (k=0; k<a; k++)
                {
                    x=m[i][k];
                    m[i][k]=m[i+1][k];
                    m[i+1][k]=x;
                }
            }
        }
    }
    cout << endl << "Преобразованный массив:" << endl;
    for (i=0; i<a; i++)
    {
        for (j=0; j<b; j++)
            cout << m[i][j] << "  ";
        cout << endl;
    }
    system("PAUSE");
    return 0;
}
Буду очень благодарен, кто поможет с решением этой проблемы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2013, 03:15     Сортировка методом пузырька, не могу найти ошибку
Посмотрите здесь:

C++ Сортировка методом Пузырька
C++ Сортировка методом пузырька
Сортировка методом пузырька C++
C++ Сортировка методом пузырька
C++ Сортировка методом пузырька
Сортировка методом пузырька C++
C++ Сортировка методом пузырька
C++ Сортировка методом пузырька

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.07.2013, 05:20     Сортировка методом пузырька, не могу найти ошибку #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int x, k;
    for (j = 0; j < b - 1; j++)
    {
        for (i = 0; i < a - 1; i++)
        {
          if (abs(m[i][0]) < abs(m[i + 1][0]))
            {
                for (k = 0; k < a; k++)
                {
                    x = m[i][k];
                    m[i][k] = m[i + 1][k];
                    m[i + 1][k] = x;
                }
            }
        }
    }
Бедел
 Аватар для Бедел
232 / 28 / 4
Регистрация: 04.06.2010
Сообщений: 283
09.07.2013, 11:12  [ТС]     Сортировка методом пузырька, не могу найти ошибку #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int x, k;
    for (j = 0; j < b - 1; j++)
    {
        for (i = 0; i < a - 1; i++)
        {
          if (abs(m[i][0]) < abs(m[i + 1][0]))
            {
                for (k = 0; k < a; k++)
                {
                    x = m[i][k];
                    m[i][k] = m[i + 1][k];
                    m[i + 1][k] = x;
                }
            }
        }
    }
Да чтоб меня акулы съели... Какой же я невнимательный)) спасибо большое, всё оказалось намного проще, чем я думал))
Yandex
Объявления
09.07.2013, 11:12     Сортировка методом пузырька, не могу найти ошибку
Ответ Создать тему
Опции темы

Текущее время: 14:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru