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

Пузырьковая сортировка - C++

Восстановить пароль Регистрация
 
 
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 18:05     Пузырьковая сортировка #1
Здравствуйте. Есть код, который сортирует методом пузырька по строчкам, что мне поменять, чтобы была сортировка по столбцам начиная с первого.? Заранее спасибо.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void main (void)
{
    setlocale(LC_ALL, "Rus");
    const int n = 3, m = 3;
    int c = 0;
    int mas[n][m];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    cout << "Исходный массив:" << endl << endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl << endl;
 
    cout << "После пузырьковай сортировки:" << endl << endl;
 
    for (int k=0; k<n; k++)
    {
        for (int l=0; l<m; l++)
        {
            for (int j=0; j<n; j++)
            {
                for (int i=0; i<m; i++)
                {
                    if (i+1 == n && j+1 == m)
                    {
                        continue;
                    }
                    else
                    {
                        if (j+1 == n && mas[i][j] > mas[0][j+1])
                        {
                            int t = mas[i][j];
                            mas[i][j] = mas[0][j+1];
                            mas[0][j+1] = t;
                            c=c+1;
                        }
                        else
                        {
                            if (mas[i][j] > mas[j+1][i])
                            {
                                int t = mas[i][j];
                                mas[i][j] = mas[j+1][i];
                                mas[j+1][i] = t;
                                c=c+1;
                            }
                        }
                    }
                }
            }           
        }       
    }
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
    cout << "Колличество перестановок = " << c << endl << endl;
    
    system("Pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 18:18     Пузырьковая сортировка #2
Этот код не работает, и вызывает проблемы со стеком.

Пузырьковая сортировка массива a[m][n]:
C++
1
2
3
4
5
6
7
8
9
for (int stolbets = 0; stolbets < n; stolbets++)
    for (int i = m-1; i > 0; i--)
        for (int j = 0; j < i; j++)
            if (a[j][stolbets] > a[j+1][stolbets])
            {
                tmp = a[j][stolbets];
                a[j][stolbets] = a[j+1][stolbets];
                a[j+1][stolbets] = tmp;
            }
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 18:27  [ТС]     Пузырьковая сортировка #3
Код должен выглядеть вот так?
#include <iostream>
#include <iomanip>

using namespace std;

void main (void)
{
setlocale(LC_ALL, "Rus");
const int n = 3, m = 3; // Размерность массива
int c = 0;
int mas[n][m];
mas[0][0] = 5;
mas[0][1] = 12;
mas[0][2] = 7;

mas[1][0] = 17;
mas[1][1] = 25;
mas[1][2] = 18;

mas[2][0] = 20;
mas[2][1] = 15;
mas[2][2] = 30;

cout << "Исходный массив:" << endl << endl;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
cout << mas[i][j] << "\t";
}
cout << endl;
}
cout << endl << endl;

cout << "После пузырьковай сортировки:" << endl << endl;

for (int stolbets = 0; stolbets < n; stolbets++)
{
for (int i = m-1; i > 0; i--)
{
for (int j = 0; j < i; j++)
if (a[j][stolbets] > a[j+1][stolbets])
{
tmp = a[j][stolbets];
a[j][stolbets] = a[j+1][stolbets];
a[j+1][stolbets] = tmp;
}
}

}
for (int j=0; j<m; j++)
{
for (int i=0; i<n; i++)
{
cout << mas[i][j] << "\t";
}
cout << endl;
}
cout << endl;
cout << "Колличество перестановок = " << c << endl << endl;

system("Pause");
}

Но, так тоже не работает((
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 18:34     Пузырьковая сортировка #4
Вы ошибки-то читайте, там много чего полезного написано обычно.

Добавлено через 42 секунды
Как минимум переменная tmp не объявлена. И переменная c не изменяется, кстати.

Добавлено через 1 минуту
А кроме этого да, примерно так все и выглядит.

Когда код вставляете, нажимайте кнопку С++, это где сообщение пишете, чуточку выше, и между спецификаторами вставляйте код.
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 18:41  [ТС]     Пузырьковая сортировка #5
Сейчас исправил. Ошибки не выдает. Но сортирует неправильно.
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
55
56
57
58
59
60
61
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void main (void)
{
    setlocale(LC_ALL, "Rus");
    const int n = 3, m = 3;    // Размерность массива
    int mas[n][m];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    cout << "Исходный массив:" << endl << endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl << endl;
 
    cout << "После пузырьковай сортировки:" << endl << endl;
 
for (int stolbets = 0; stolbets < n; stolbets++)
{
    for (int i = m-1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
            if (mas[j][stolbets] > mas[j+1][stolbets])
            {
                int tmp = mas[j][stolbets];
                mas[j][stolbets] = mas[j+1][stolbets];
                mas[j+1][stolbets] = tmp;
            }
    }
 
}
    for (int j=0; j<m; j++)
    {
        for (int i=0; i<n; i++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
    
    system("Pause");
}
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
18.04.2014, 18:53     Пузырьковая сортировка #6
Виктор27, вот..вроде сортирует))) хз что у вас там с сортировкой она вроде все-таки неправильно сортирует, но самое главное, что вы в конце массив неправильно выводите!
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void main (void)
{
    setlocale(LC_ALL, "Rus");
    const int n = 3, m = 3;    // Размерность массива
    int mas[n][m];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    cout << "Исходный массив:" << endl << endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl << endl;
 
    cout << "После пузырьковай сортировки:" << endl << endl;
 
    /*for (int stolbets = 0; stolbets < n; stolbets++)
    {
        for (int i = m-1; i > 0; i--)
        {
            for (int j = 0; j < i; j++)
                if (mas[j][stolbets] > mas[j+1][stolbets])
                {
                    int tmp = mas[j][stolbets];
                    mas[j][stolbets] = mas[j+1][stolbets];
                    mas[j+1][stolbets] = tmp;
                }
        }
 
    }*/
    for (int i=0;i<n;i++) {
        for (int j=0; j<m-1; j++)
        {
            if (mas[i][j]>mas[i][j+1]) {
                int x=mas[i][j];
                mas[i][j]=mas[i][j+1];
                mas[i][j+1]=x;
            }
        }
    }
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
    
    system("Pause");
}
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 18:57  [ТС]     Пузырьковая сортировка #7
Да, код так сортирует по строкам, а мне надо по столбцам, помогите пожалуйста!
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 19:08     Пузырьковая сортировка #8
Сортировку я вам правильно написала. Вывод неправильный. Был.
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
55
56
57
58
59
60
61
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void main (void)
{
    setlocale(LC_ALL, "Rus");
    const int n = 3, m = 3;    // Размерность массива
    int mas[n][m];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    cout << "Исходный массив:" << endl << endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl << endl;
 
    cout << "После пузырьковай сортировки:" << endl << endl;
 
for (int stolbets = 0; stolbets < n; stolbets++)
{
    for (int i = m-1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
            if (mas[j][stolbets] > mas[j+1][stolbets])
            {
                int tmp = mas[j][stolbets];
                mas[j][stolbets] = mas[j+1][stolbets];
                mas[j+1][stolbets] = tmp;
            }
    }
 
}
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
    
    system("Pause");
}
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 19:13  [ТС]     Пузырьковая сортировка #9
Керра, спасибо. А мне надо чтоб сортировка была по возрастающей по столбцам от маленького элемента а в самом конце максимальный элемент. Помогите пожалуйста тупому. Учусь на заочке, приходится учить самому, и не как до меня не доходит. Как отсортировать?
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 19:20     Пузырьковая сортировка #10
Она же и есть возрастающая по столбцам. Смотрите отдельно на каждый столбец - каждый столбец отсортирован по возрастанию.

Добавлено через 41 секунду
А в "самом конце" максимальный элемент - это уже получается сортировка всей матрицы, а не по столбцам.
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 20:04  [ТС]     Пузырьковая сортировка #11
Да, мне надо отсортировать всю матрицу по возрастающей по столбцам. Прошу прощения если не правильно выразился.

Добавлено через 42 минуты
Помогите пожалуйста отсортировать, всю матрицу по возрастающему по столбцам. PLEASE))))))))
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 20:08     Пузырьковая сортировка #12
Отсортировать всю матрицу - это одно, а отсортировать каждый столбец отдельно - это другое.
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 20:14  [ТС]     Пузырьковая сортировка #13
Сказали всю матрицу отсортировать.
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 20:15     Пузырьковая сортировка #14
Ну так зачем вы про столбцы вообще говорили...
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 20:16  [ТС]     Пузырьковая сортировка #15
простите...
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
18.04.2014, 20:24     Пузырьковая сортировка #16
C++
1
2
3
4
5
6
7
8
for (int j = m*n-1; j > 0; j--)
        for (int i = 0; i < j; i++)
            if (**(a+i) > **(a+i+1))
            {
                tmp = **(a+i);
                **(a+i) = **(a+i+1);
                **(a+i+1) = tmp;
            };
где-то так
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 20:36  [ТС]     Пузырьковая сортировка #17
Нифига у меня не полчается.
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
55
56
57
58
59
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void main (void)
{
    setlocale(LC_ALL, "Rus");
    const int n = 3, m = 3;    // Размерность массива
    int mas[n][m];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    cout << "Исходный массив:" << endl << endl;
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl << endl;
 
    cout << "После пузырьковай сортировки:" << endl << endl;
 int a;
for (int j = m*n-1; j > 0; j--)
{
        for (int i = 0; i < j; i++)
        {
            if (**(a+i) > **(a+i+1))
            {
                tmp = **(a+i);
                **(a+i) = **(a+i+1);
                **(a+i+1) = tmp;
            }
        }
}
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
    
    system("Pause");
}
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
18.04.2014, 21:33     Пузырьковая сортировка #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Виктор27, вот
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
#include <iostream>
#include <vector>
 
using namespace std;
 
void main (void)
{
    int mas[3][3];
    mas[0][0] = 5;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    for (int i=0; i<3;i++){
        for (int j=0; j<3;j++){
            cout<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"-------------\n"<<endl;
    int*p=*mas;
    int tmp;
    for (int i=0;i<8;i++) {
        for(int j=i+1;j<9;j++) {
            if (*(p+i)>*(p+j)) {
                tmp=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=tmp;
            }
        }
    }
    for (int i=0; i<3;i++){
        for (int j=0; j<3;j++){
            cout<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    system("pause");
}
Виктор27
 Аватар для Виктор27
10 / 10 / 2
Регистрация: 21.11.2013
Сообщений: 287
18.04.2014, 22:22  [ТС]     Пузырьковая сортировка #19
А можно еще вопросик, если дана матрица и надо ее отсортировать, по первому столбцу, т.е. если первый элемент первого столбца больше второго элемента первого столбца, то строки меняются местами. Как будет выглядеть код?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 22:33     Пузырьковая сортировка
Еще ссылки по теме:

Пузырьковая сортировка C++
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка
C++ Пузырьковая сортировка

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

Или воспользуйтесь поиском по форуму:
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
18.04.2014, 22:33     Пузырьковая сортировка #20
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Виктор27,
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
#include <iostream>
#include <vector>
 
using namespace std;
 
void main (void)
{
    //int mas[3][3];
    int n=3;
    int** mas=new int*[n];
    for (int i=0;i<n;i++)
        mas[i]=new int[n];
    mas[0][0] = 50;
    mas[0][1] = 12;
    mas[0][2] = 7;
 
    mas[1][0] = 17;
    mas[1][1] = 25;
    mas[1][2] = 18;
    
    mas[2][0] = 20;
    mas[2][1] = 15;
    mas[2][2] = 30;
 
    for (int i=0; i<n;i++){
        for (int j=0; j<n;j++){
            cout<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"-------------\n"<<endl;
    int*p;
    for (int i=0;i<n-1;i++) {
        if (mas[i][0]>mas[i+1][0]) {
            p=mas[i];
            mas[i]=mas[i+1];
            mas[i+1]=p;
        }
    }
    for (int i=0; i<3;i++){
        for (int j=0; j<3;j++){
            cout<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    for (int i=0;i<n;i++)
        delete mas[i];
    delete mas;
    system("pause");
}
Yandex
Объявления
18.04.2014, 22:33     Пузырьковая сортировка
Ответ Создать тему
Опции темы

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