0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
1

Распределяющая сортировка

27.10.2018, 19:41. Показов 1843. Ответов 11
Метки нет (Все метки)

Имею такой код

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
#include < iostream >
#include < cstdlib >
#include < ctime >
#include < iomanip >
 
using namespace std;
 
void methodOfCalculation(int n, int mass[], int sortedMass[])
{
    int k;
    for (int i = 0; i < n; i++)
    {
        k = 0;
        for (int j = 0; j < n; j++)
        {
            if (mass[i] > mass[j])
                k++;
        }
        sortedMass[k] = mass[i];
    }
}
 
 
int main()
{
    
 
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    
    cout << "Введите длину массивов ";
    unsigned n;
    cin >> n;
    int *sortedMass;
    sortedMass = (int *) malloc(n * sizeof(int));
    auto a = new int[n];
    auto b = new int[n];
    auto mass = new int[n];
    cout << "Массив А" << endl;
    for (unsigned p = 0; p < n; ++p)
    {
        a[p] =  rand() % 21;
        cout << setw(4) << a[p];
        b[p] =  rand() % 21;
        mass[p] = (a[p] = b[p] ? a[p] + b[p]: 1);
    }
    cout << endl;
    cout << "Массив B" << endl;
    for (unsigned p = 0; p < n; ++p)
    {
        cout << setw(4) << b[p];
    }
    cout << endl;
    cout << "Массив C" << endl;
    for (unsigned p = 0; p < n; ++p)
    {
        cout << setw(4) << mass[p];
    }
    cout << endl;
 
 
    methodOfCalculation (n, mass, sortedMass);
    printf("Sorted array:\n");
    for (int i = 0; i < n; i++)
        printf("%d ", sortedMass[i]);
    printf("\n");
 
 
    cin.get(); cin.get();
}
ПРОБЛЕМА:
Но если использовать более 11 элементов, я будто выхожу за границы массива. Проблема возникает где то после сложения элементов массивов а и b.


А вот само задание, над которым я бьюсь.

Дано два массива a и b, каждый состоит из n элементов (n = 1,2,3 ...). Построить третий массив c при условии ci = ai + bi. Отсортировать его по возрастанию.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2018, 19:41
Ответы с готовыми решениями:

Распределяющая сортировка
Разбираю данную сортировку из вот этого материала http://algolist.manual.ru/sort/faq/q11.php и...

Стек и распределяющая память. Где лучше хранить? В чем различия?
Например: #include &quot;stdafx.h&quot; using namespace System; // Class representing a height value...

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом...

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

11
1968 / 1094 / 466
Регистрация: 11.10.2018
Сообщений: 5,599
27.10.2018, 19:54 2
Цитата Сообщение от f1g1 Посмотреть сообщение
C++
1
a[p] = b[p]
- здесь не нужно ставить двойное равно("==")? По-моему, надо.
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
27.10.2018, 19:56  [ТС] 3
По-моему нет. Во всяком случае проблема не в этом...
0
1968 / 1094 / 466
Регистрация: 11.10.2018
Сообщений: 5,599
27.10.2018, 20:04 4
А где сложение-то вообще? В 45 строке?

Добавлено через 1 минуту
Цитата Сообщение от f1g1 Посмотреть сообщение
C++
1
void methodOfCalculation(int n, int mass[], int sortedMass[])
- да и вот это что-то смущает меня. Я обычно пишу так:
C++
1
void MethodOfCalculation(int n, int *mass, int *sortedmass)
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
27.10.2018, 20:07  [ТС] 5
Ну да, в 45. Это мы получаем не отсортированный массив С.

Добавлено через 1 минуту
Цитата Сообщение от FFPowerMan Посмотреть сообщение
да и вот это что-то смущает меня. Я обычно пишу так:
Попробовал таким образом. Похоже это ни на что не влияет.
0
1968 / 1094 / 466
Регистрация: 11.10.2018
Сообщений: 5,599
27.10.2018, 20:31 6
Цитата Сообщение от f1g1 Посмотреть сообщение
C++
1
mass[p] = (a[p] = b[p] ? a[p] + b[p]: 1);
- здесь, по-моему, ошибка.
1) Пропустили двойное равно, как я уже говорил.
2) И условие задачи не выполняется. В нем не нужно ставить условие, а просто сложить их. А у Вас условие какое-то, если они равны тогда найти сумму, иначе 1 - этого нет в условии задачи.

Добавлено через 5 минут
Да и память не высвобождаете после работы:
C++
1
delete[] a;
Добавлено через 54 секунды
А для malloca, по-моему, free() - память высвобождать - посмотрите в справке, я не помню точно.

Добавлено через 16 минут
А сортировка нормально работает? Запустите отладчик - посмотрите переменные внутри.
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
27.10.2018, 20:43  [ТС] 7
Сортирует нормально, если не учитывать, что некоторые элементы... В общем вот для примера типичная последовательность на выходе программы.

12 16 -842150451 18 20 24 -842150451 27 31 33
0
1968 / 1094 / 466
Регистрация: 11.10.2018
Сообщений: 5,599
27.10.2018, 21:07 8
Сделайте так:
C++
1
2
3
int* a = new int[n];
int* b = new int[n];
int* mass = new int[n];
Добавлено через 2 минуты
Да что-то у меня нифига нормально не сортирует. - Значит там косяк. 0 вообще в конце, а 15 и 21 вначале.

Добавлено через 3 минуты
И насчет двойного равно я был прав. У Вас сейчас в условии ничего не работает - уберите его(строка 45). - Будет работать только при двойном равно. И там пойдут одни единицы в массиве С(результирующий массив).

Добавлено через 1 минуту
Вот так вообще нужно сделать по условию задачи:
C++
1
mass[p] = a[p]+b[p];
Добавлено через 7 минут
У Вас сортировка неправильно работает - там числа как попало идут. Да и переполнения памяти(выход за границы массивов в памяти) тоже наверное там происходят. Я не совсем уверен, но если распределяющая сортировка - это поразрядная сортировка, то ее код есть на форуме:
Алгоритмы сортировок
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
27.10.2018, 21:15  [ТС] 9
Заменил строку 45 и исправил строки 36-38.
Всё в общем то по старому.
3 10 15 20 -842150451 22 -842150451 24 30 33
0
Мозгоправ
1736 / 1030 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
28.10.2018, 03:05 10
Цитата Сообщение от f1g1 Посмотреть сообщение
А вот само задание, над которым я бьюсь.
Дано два массива a и b, каждый состоит из n элементов (n = 1,2,3 ...). Построить третий массив c при условии ci = ai + bi. Отсортировать его по возрастанию.
Я конечно может чего-то не понимаю... но как связана эта задача с названием темы?
Я тут простенькое решение накидал. Если надо с динамическими массивами - подправите.
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
#include <iostream> 
#include <algorithm>
 
using namespace std;
 
const size_t SIZE = 10;
 
int main() {
 
    int a[SIZE], b[SIZE], c[SIZE];
 
    for (size_t i = 0; i < SIZE; ++i) {
        a[i] = rand() % 100;
        b[i] = rand() % 100;
 
        c[i] = a[i] + b[i];
 
        cout << a[i] << '\t' << b[i] << '\t' << c[i] << endl;
    }
 
    sort(c, c + SIZE);
 
    cout << "Sorted c:\n";
    for (size_t i = 0; i < SIZE; ++i) {
        cout << c[i] << ' ';
    }
    cout << endl;
}
0
0 / 0 / 0
Регистрация: 22.05.2016
Сообщений: 16
28.10.2018, 13:55  [ТС] 11
Мне нужно именно методом распределяющей сортировки.
0
1968 / 1094 / 466
Регистрация: 11.10.2018
Сообщений: 5,599
28.10.2018, 14:48 12
Вы почитайте вообще, что это за метод такой. По-моему, у Вас не распределяющая сортировка сейчас в коде.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2018, 14:48
Помогаю со студенческими работами здесь

Разработать программу сортировки: сортировка перестановкой, сортировка вставкой, быстрая сортировка
Задание: Разработать программу сортировки: - сортировка перестановкой - сортировка...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента...

Сортировка массива целых чисел A(n) по убыванию(используя метод обменная сортировка)
Помогите написать программу для сортировки массива целых чисел A(n) по убыванию(используя метод...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru