Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
1

Функция для сортировки массива пузырьком

14.11.2017, 21:26. Показов 1535. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите исправить код. Скорей всего проблема в сортировке.
Условие:
Дана матрица (N+15)x(N+15), отсортировать парные рядки в прямом порядке, а непарные в обратном, числа генерировать случайно в интервале [- N-15; N+15].

Код:

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
#include <iostream>
#include <ctime>
#include <iomanip>
#include <stdio.h>
using namespace std;
int N;
void input(int **mass, int size)
{
    for (int i = 0; i < size; i++) 
    {
        for (int j = 0; j < size; j++)
        {
            mass[i][j]=rand() % (size * 2+1)-size;
            cout<<setw(4) << mass[i][j];
        }
        cout<<endl;
    }
    cout<<endl;
}
void sort(int **mass, int size)
{
    int tmp;
 
    for (int m = 0; m < size; m++) 
    {
 
        for (int i = 1; i > size; ++i) 
        {
 
            for (int j = i; j < size; j--) 
            {
 
                if (m % 2 == 0) 
                {
                    if (mass[m][j] > mass[m][j - 1]) 
                    {
 
                        tmp = mass[m][j];
                        mass[m][j] = mass[m][j - 1];
                        mass[m][j - 1] = tmp;
                    }
                }
                else{
                    if (mass[m][j] < mass[m][j - 1]) 
                    {
 
                       tmp = mass[m][j];
                        mass[m][j] = mass[m][j - 1];
                        mass[m][j - 1] = tmp;
                    }
                }
            }
        }
    }
}
 
 
void main()
{
    srand(time(NULL));
    cin>>N;
    int size = N+15;
    int **mass = new int* [size];
    for (int i = 0; i <= size; i++)
    {
        mass[i]=new int[size];
    }
    input(mass,size);
    void sort(int** mass,int size);
    for (int i = 0; i <= size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            cout<<setw(4)<<mass[i][j];
        }
        cout<<endl;
    }
    for (int i = 0; i <= size; i++)
    {
        delete[] mass[i];
    }
 
system ("PAUSE");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2017, 21:26
Ответы с готовыми решениями:

Функция для сортировки массива пузырьком
Всем огромное спасибо! помогли и примеры что надо. Всем удачи! Добавлено через 11 часов 30 минут...

Написать программу для сортировки массива способами шелла вставки слияния и пузырьком
Написать программу для сортировки массива способами шелла вставки слияния и пузырьком в одной...

Написать функцию сортировки пузырьком массива
Нужно написать функцию сортировки (например пузырьком) массива, а затем отсортировать ей...

Написать алгоритм сортировки одномерного массива пузырьком
Написать алгоритм сортировки одномерного массива пузырьком.

20
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
14.11.2017, 21:42 2
Рядки в огороде.
Каждую группу раздельно сортируй.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
14.11.2017, 21:53  [ТС] 3
nmcf, можешь конкретней подсказать что убрать и что изменить?
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
14.11.2017, 21:55 4
Делаешь цикл по нечётным - с шагом 2. В нём сортируешь текущую строку обычным способом.
То же с чётными.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
14.11.2017, 22:17  [ТС] 5
nmcf, Я что-то неправильно делаю. Результат все тот же. И почему вылазит последняя строка цифр, как ее убрать?
Миниатюры
Функция для сортировки массива пузырьком  
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
14.11.2017, 22:22 6
Показывай.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
14.11.2017, 22:26  [ТС] 7
nmcf,
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
88
89
90
91
92
93
94
95
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
#include <stdio.h>
using namespace std;
int N;
void input(int **mass, int size)
{
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            mass[i][j] = rand() % (size * 2 + 1) - size;
            cout << setw(4) << mass[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
void sort(int **mass, int size)
{
    int tmp;
 
    for (int m = 0; m < size; m+=2)
    {
        for (int i = 1; i > size; ++i)
        {
            for (int j = i; j < size; j--)
            {
                if (m % 2 == 0)
                {
                    if (mass[m][j] > mass[m][j - 1])
                    {
                        tmp = mass[m][j];
                        mass[m][j] = mass[m][j - 1];
                        mass[m][j - 1] = tmp;
                    }
                }
            }
        }
    }
    for (int m = 0; m < size; m+=2)
    {
 
        for (int i = 1; i > size; i += 2)
        {
 
            for (int j = i; j < size; j--)
            {
 
                if (m % 2 == 1)
                {
                    if (mass[m][j] < mass[m][j - 1])
                    {
 
                        tmp = mass[m][j];
                        mass[m][j] = mass[m][j - 1];
                        mass[m][j - 1] = tmp;
                    }
                }
            }
        }
    }
}
 
    
 
void main()
{
    srand(time(NULL));
    cin >> N;
    int size = N + 15;
    int **mass = new int*[size];
    for (int i = 0; i <= size; i++)
    {
        mass[i] = new int[size];
    }
    input(mass, size);
    void sort(int** mass, int size);
    for (int i = 0; i <= size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            cout << setw(4) << mass[i][j];
        }
        cout << endl;
    }
    for (int i = 0; i <= size; i++)
    {
        delete[] mass[i];
    }
 
    system("PAUSE");
}
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
14.11.2017, 22:39 8
Чётные пузырьком:
C++
1
2
3
4
5
6
7
8
9
10
11
    for (int m = 1; m < size; m+=2)
    {
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] > mass[m][j])
                    std::swap(mass[m][j + 1], mass[m][j]);
            }
        }
    }
Нечётные допили сам.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
14.11.2017, 22:45  [ТС] 9
nmcf, спасибо
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
15.11.2017, 22:33  [ТС] 10
Добрый вечер!
После сортировки массива через функцию выводит бред. Помогите найти и исправить проблему.
Условие:
Дана матрица (N+15)x(N+15), отсортировать парные рядки в прямом порядке, а непарные в обратном, числа генерировать случайно в интервале [- N-15; N+15].

Код:

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
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
#include <stdio.h>
using namespace std;
 
void sort(int **mass, int size)
{
    for (int m = 1; m < size; m += 2)
    {
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] > mass[m][j])
                {
                    swap(mass[m][j + 1], mass[m][j]);
                }
 
 
                else
                {
                    if (mass[m][j + 1] < mass[m][j])
                    {
                        swap(mass[m][j + 1], mass[m][j]);
                    }
                }
            }
        }
    }
}
 
 
    
    
 
 
void main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
 
    int N = 0;
    int size = N + 15;
    cout << "Введите число: ";
    cin >> N;
 
    int **mass = new int*[N];
 
    for (int i = 0; i < N; i++) 
    {
 
        mass[i] = new int[N];
 
    }
    cout << "\n";
    cout << " Массив до сортировки: " << endl;
    cout << "\n";
    for (int i = 0; i <N; i++)
    {
 
        for (int j = 0; j < N; j++)
 
        {
            mass[i][j] = -(N)+rand() % ((N) * 2);
            cout << mass[i][j] << "\t";
        }
        cout << endl;
    }
    cout << "\n";
 
    void sort(int mass,int size);
    cout << "Массив после сортировки" << endl;
    for (int i = 0; i < size; i++)
        cout << mass[i] << ' ';
    cin.get();
    cin.get();
    system("PAUSE");
}
Миниатюры
Функция для сортировки массива пузырьком  
0
MrGluck
16.11.2017, 01:15
  #11
 Комментарий модератора 
Олег Фирамов, запрещено дублировать темы
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
16.11.2017, 08:50 12
Я же сказал: чётные и нечётные раздельно. Какой else? Этот фрагмент должен быть неизменным.
0
Kuzia domovenok
16.11.2017, 09:01
  #13

Не по теме:

боже, ты даже вставить готовый ответ в программу без приключений не можешь!

0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
16.11.2017, 20:54  [ТС] 14
nmcf, я и так и так делал, отдельно тоже самое. Просто взял код последней моей попытки.
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
16.11.2017, 21:25 15
Показывай.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
17.11.2017, 00:04  [ТС] 16
nmcf,
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
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
#include <stdio.h>
using namespace std;
 
void sort(int **mass, int size)
{
    for (int m = 1; m < size; m += 2)
    {
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] > mass[m][j])
                {
                    swap(mass[m][j + 1], mass[m][j]);
                }
            }
        }
    }
    for (int m = 1; m < size; m += 2)
    {
        for (int i = 1; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] < mass[m][j])
                {
                    swap(mass[m][j + 1], mass[m][j]);
                }
            }
        }
    }
}
 
 
void main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
 
    int N = 0;
    int size = N + 15;
    cout << "Введите число: ";
    cin >> N;
 
    int **mass = new int*[N];
 
    for (int i = 0; i < N; i++)
    {
 
        mass[i] = new int[N];
 
    }
    cout << "\n";
    cout << " Массив до сортировки: " << endl;
    cout << "\n";
    for (int i = 0; i < N; i++)
    {
 
        for (int j = 0; j < N; j++)
 
        {
            mass[i][j] = -(N)+rand() % ((N) * 2);
            cout << mass[i][j] << "\t";
        }
        cout << endl;
    }
    cout << "\n";
 
    void sort(int mass, int size);
    cout << "Массив после сортировки" << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j <= size; j++)
        {
            cout << setw(4) << mass[i][j];
        }
        cout << endl;
    }
    cout << endl;
 
        system("PAUSE");
}
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
17.11.2017, 05:13 17
В таком варианте цикл по I вообще лишний

Добавлено через 5 часов 0 минут
хотя вру
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
17.11.2017, 08:01 18
В 23-й цикл с нуля. В 73-й вызов функции оформи как положено.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 13
17.11.2017, 18:33  [ТС] 19
nmcf, Все работает, нашел еще другие ошибки. Сейчас столкнулся с другой проблемой. В конце каждой строки выведенного массива лишние цифры. Подскажешь что исправить?
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 "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
#include <stdio.h>
using namespace std;
 
void sort(int **mass, int size)
{
    for (int m = 1; m < size; m += 2)
    {
        for (int i = 1; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] < mass[m][j])
                {
                    swap(mass[m][j + 1], mass[m][j]);
                }
            }
        }
    }
    for (int m = 0; m < size; m += 2)
    {
        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                if (mass[m][j + 1] > mass[m][j])
                {
                    swap(mass[m][j + 1], mass[m][j]);
                }
            }
        }
    }
}
 
 
void main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
 
    int N = 0;
    int size = N + 15;
    cout << "Введите число: ";
    cin >> N;
 
    int **mass = new int*[N];
 
    for (int i = 0; i < size; i++)
    {
 
        mass[i] = new int[N];
 
    }
    cout << "\n";
    cout << " Массив до сортировки: " << endl;
    cout << "\n";
    for (int i = 0; i < size; i++)
    {
 
        for (int j = 0; j < size; j++)
 
        {
            mass[i][j] = -(N)+rand() % ((N) * 2);
            cout << mass[i][j] << "\t";
        }
        cout << endl;
    }
    cout << "\n";
 
    sort(mass, size);
    cout << "Массив после сортировки" << endl;
    cout << "\n";
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j <= size; j++)
        {
            cout << setw(4) << mass[i][j];
        }
        cout << endl;
    }
    cout << endl;
 
    system("PAUSE");
}
Миниатюры
Функция для сортировки массива пузырьком  
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
17.11.2017, 18:34 20
Цитата Сообщение от Олег Фирамов Посмотреть сообщение
C++
1
2
3
4
for (int j = 0; j <= size; j++) 
{
   cout << setw(4) << mass[i][j]; 
}
строго меньше size, без равно
0
17.11.2017, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2017, 18:34
Помогаю со студенческими работами здесь

Функция для сортировки массива выбором
Добрый день всем, на сегодня лабораторная нужна, но не могу понять как реализовать этот код За...

Функция сортировки массива
Дан массив целых чисел. Напишите функцию, которая получает данный массив в качестве аргумента и...

Функция сортировки массива
Необходимо написать функцию сортировки массива структур с информацией по книгам по возрастанию года...

Функция сортировки массива
Задание - необходимо осуществить сортировку, используя функцию. Я написал код, но он не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru