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

Напишите функцию которая сортирует методом пузырька

15.08.2022, 08:08. Показов 877. Ответов 10
Метки с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите функцию
void sortHalfs(double arr[], int nSize),
которая сортирует методом пузырька первую половину массива (nSize/2) по убыванию, а вторую — по возрастанию.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2022, 08:08
Ответы с готовыми решениями:

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

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

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

Написать функцию, которая сортирует вещественный массив методом Хоара
Написать функцию ,которая сортирует вещественный массив методом Хоара по убыванию суммы разности...

Напишите программу, которая сортирует цифры числа по возврастанию
Доброго времени суток. Можно ли как-то оптимизировать решение? // Напишите программу, которая...

10
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.08.2022, 08:56 2
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
void sortHalfs(double arr[], int nSize)
{
    if(nSize & 1u)
    {
        return;
    }
    const int32_t center = nSize / 2.;
    auto sort_bubble = [](double arr[], int start, int nSize, bool less) -> void
    {
        for (int32_t i = start; i < nSize - 1; ++i)
        {
            for (int32_t j = start; j < nSize - i - 1; ++j)
            {
                if ((arr[j] > arr[j + 1] && less) ||
                    (arr[j] < arr[j + 1] && !less))
                {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    sort_bubble(arr, 0, center, true);
    sort_bubble(arr, center, nSize, false);
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
15.08.2022, 09:12 3
SomniPhobia, неэффективно... В правильной пуз. сортировке внешний цикл должен быть итерационным.
1
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.08.2022, 09:19 4
Catstail, спасибо за комментарий. Я использую в проектах стандартную сортировку std::sort(). В этом же задании запрошена пузырьковая. Она наглядная и обучательная для реализации руками. Я её скопировал из Интернет, а оболочку написал сам
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
15.08.2022, 09:33 5
Лучший ответ Сообщение было отмечено daimyo как решение

Решение

Цитата Сообщение от SomniPhobia Посмотреть сообщение
Я её скопировал из Интернет
- вот и зря... Самому надо писать. К тому же и в Вашем коде есть ошибка (неописанная переменная temp). Вот политкорректный код:

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
#include <iostream>
 
using namespace std;
 
void sortHalfs(double arr[], int nSize)
{
    if(nSize & 1u)
    {
        return;
    }
    const int32_t center = nSize / 2;
    auto sort_bubble = [](double arr[], int start, int nSize, bool less) -> void
    {
        int32_t k=1,c;
        double temp;
        
        while (true)
        {
            c=0;
            
            for (int32_t j = start; j < nSize - k; ++j)
            
            {
                if ((arr[j] > arr[j + 1] && less) ||
                    (arr[j] < arr[j + 1] && !less))
                {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    c++;
                }
            }
            
            if (c==0) return;
            k++;
        }
    };
    
    sort_bubble(arr, 0, center, true);
    sort_bubble(arr, center, nSize, false);
}
 
int main()
{
    double x[]={4,5,-6,3,0,-6,5,2};
    
    for (int i=0; i<8; i++) cout << x[i] << " ";
    
    cout << endl;
    
    sortHalfs (x,8);
 
    for (int i=0; i<8; i++) cout << x[i] << " ";
    
    cout << endl;
 
    return 0;
}
2
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.08.2022, 09:42 6
Catstail, я бы ограничил (сузил) область видимости переменной temp и сделал бы её константной
Интересная реализация алгоритма сортировки пузырьком. Ранее не встречал такую

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
#include <iostream>
 
using namespace std;
 
void sortHalfs(double arr[], int nSize)
{
    if(nSize & 1u)
    {
        return;
    }
    const int32_t center = nSize / 2;
    auto sort_bubble = [](double arr[], int start, int nSize, bool less) -> void
    {
        int32_t k=1;
        
        while (true)
        {
            int32_t c=0;
            
            for (int32_t j = start; j < nSize - k; ++j)
            
            {
                if ((arr[j] > arr[j + 1] && less) ||
                    (arr[j] < arr[j + 1] && !less))
                {
                    const double temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    c++;
                }
            }
            
            if (c==0) return;
            k++;
        }
    };
    
    sort_bubble(arr, 0, center, true);
    sort_bubble(arr, center, nSize, false);
}
 
int main()
{
    double x[]={4,5,-6,3,0,-6,5,2};
    
    for (int i=0; i<8; i++) cout << x[i] << " ";
    
    cout << endl;
    
    sortHalfs (x,8);
 
    for (int i=0; i<8; i++) cout << x[i] << " ";
    
    cout << endl;
 
    return 0;
}
2
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
15.08.2022, 12:16 7
SomniPhobia, вообще задание можно двояко понимать
8 10 7 1 9 4 5 2 3 6
надо отсортировать так
1 2 3 4 5 10 9 8 7 6 - значения переносятся по всему массиву
или так?
1 7 8 9 10 6 5 4 3 2 - значения переносятся в пределах своих половин.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
15.08.2022, 12:23 8
SomniPhobia, это просто правильная организация пуз. сортировки. А когда внешний цикл крутится n раз - это верный признак студенческого происхождения. Могу объяснить, почему внешний цикл следует сделать итерационным. Количество проходов зависит от числа инверсий в исходном массиве. Заранее это число неизвестно. Предположим, что исходный массив содержит 1000 эл-тов и выглядит так: {1,2,3,...,1000,999}. Т.е. инверсия всего одна. Код с итерационным циклом выполнит два прохода: на первом инверсия будет исправлена, на втором обнаружится, что инверсий нет. А студенческая реализация выполнит 1000 циклов...

Цитата Сообщение от SomniPhobia Посмотреть сообщение
я бы ограничил (сузил) область видимости переменной temp и сделал бы её константной
- а у temp, что, широкая область видимости? Она же описана в коде лямбды... И разве можно делать константой переменную, которая фигурирует слева от знака "="? Не понял...

А... Не разглядел. Да, так, верно. Но к чему такой пуризм?
0
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.08.2022, 12:27 9
Catstail, расскажи как работает сортировка из стандартной библиотеки, std::sort()? Я слышал, что она адаптивно подходит к набору данных, подлежащему сортировке
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
15.08.2022, 12:30 10
SomniPhobia, не знаю деталей. Надо смотреть исходники. Но один из самых лучших современных алгоритмов - это Timsort - гибридный алгоритм, включающий сортировку вставками и сортировку слиянием. Возможно и std::sort уже такова.
1
Эксперт функциональных языков программированияЭксперт С++
4167 / 1997 / 961
Регистрация: 01.06.2021
Сообщений: 7,051
Записей в блоге: 6
15.08.2022, 14:45 11
Цитата Сообщение от Catstail Посмотреть сообщение
Но один из самых лучших современных алгоритмов - это Timsort - гибридный алгоритм, включающий сортировку вставками и сортировку слиянием. Возможно и std::sort уже такова.
Timsort используется в Python и частично в Java и еще в нескольких языках.
Мне кажется, что в С++ используется интроспективная сортировка Мюссера, которая ничем не уступает Timsort. Что у первого алгоритма, что у второго, худший (как и средний) случай это O(n*log(n))
2
15.08.2022, 14:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2022, 14:45
Помогаю со студенческими работами здесь

Напишите программу, которая сортирует массив по возрастанию "методом камня": аналогично "методу пузырька", но
Помогите пожалуйста написать код.Напишите программу, которая сортирует массив по возрастанию...

Написать программу, которая сортирует массив из N элементов по возрастанию методом «пузырька»
20. Написать программу, которая сортирует массив из N элементов по возрастанию методом «пузырька»....

Программа, которая создаёт процесс, что сортирует элементы массива методом пузырька
Мне нужно написать программу, которая создаёт процесс, что сортирует элементы массива методом...

Написать программу, которая методом обмена («пузырька») сортирует по убыванию введенный с клавиатуры одномерный массив
Написать программу, которая методом обмена («пузырька») сортирует по убыванию введенный с...

Создать процедуру, которая сортирует массив"методом пузырька"
Задание 3. Создать процедуру, которая сортирует массив&quot;методом пузырька&quot;.

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


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

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