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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Ant87
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 5
#1

Как работает метод Пузырька? - C++

29.11.2011, 14:47. Просмотров 1084. Ответов 2
Метки нет (Все метки)

Добрый день, господа...
Делаю задание по сортировке массива... Нашел вот эту статью - http://debugni.ru/index.php?option=c...8-02&Itemid=14 , но не могу понять, как работает этот метод... Можите как-то подробнее рассказать о его работе (желательно по этому коде)...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 14:47     Как работает метод Пузырька?
Посмотрите здесь:

Метод пузырька C++
Метод обратного пузырька(камешка) C++
Код не работает как метод... C++
C++ Обратный метод пузырька
Сортировка массива по возрастанию (метод пузырька) С++ C++
Метод пузырька C++
C++ метод пузырька
Комбинированный метод быстрой сортировки с методом «пузырька» C++
Метод пузырька C++
C++ Матрица, метод пузырька
C++ Программа с массивами и метод пузырька
метод пузырька C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5818 / 1216 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
29.11.2011, 14:55     Как работает метод Пузырька? #2
Ant87, Начнем с того что это не метод пузырька.
Создавать массив под 1000 элементов как минимум глупо, можно использовать динамические массивы
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
30.11.2011, 14:47     Как работает метод Пузырька? #3
мой старый код

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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
 
int main()
{
    int massiv[10];
    bool gate = false;
 
    srand(time(NULL));
 
    for(int i = 0; i < 10; i++)
    {
        massiv[i] = 1 + rand() % 1000;
        std::cout << std::setw(5) << massiv[i];
    }
 
    int count = 0;
    int a;
    int b;
 
    while(!gate)
    {
        a = 0;
        b = 0;
 
        for(; a < 9; a++)
        {
            if(massiv[a] > massiv[a+1])
            {
                massiv[a] += massiv[a+1];
                massiv[a+1] = massiv[a] - massiv[a+1];
                massiv[a] -= massiv[a+1];
            }
            else
            {
                for(; b < 9; b++)
                {
                    if(massiv[b] <= massiv[b+1])
                        count++;
                    else
                    {
                        b = 10;
                        count = 0;
                    }
 
                }
            }
        }
 
        if(count == 9)
            gate = true;
    }
 
    std::cout << std::endl;
 
    for(int i = 0; i < 10; i++)
        std::cout << std::setw(5) << massiv[i];
 
    std::cout << std::endl;
 
    return 0;
}
если сортировать по возрастанию
сравниваются два элемента, если младший больше старшего (i > i+1) они меняются местами и так n-1 раз

Добавлено через 23 часа 51 минуту
если ещё кому нужно
оптимизировал код

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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
 
void maxOfMassiv(int []);
 
int main()
{
    int mass[10];
 
    enum Sort { DONE, PERFORMED };
 
    Sort sortStatus = PERFORMED;
 
    srand(time(NULL));
 
    for(int i = 0; i < 10; i++)
    {
        mass[i] = 1 + rand() % 100;
        std::cout << std::setw(5) << mass[i];
    }
 
    std::cout << std::endl;
 
    int limit = 8;
 
    while(sortStatus)
    {
        int j = 0;
        int count = 0;
 
        maxOfMassiv(mass);
 
        int max = mass[0];
 
        for(int j = 0; j < limit; j++)
            if(mass[j] > mass[j+1])
            {
                mass[j] += mass[j+1];
                mass[j+1] = mass[j] - mass[j+1];
                mass[j] -= mass[j+1];
                count++;
            }
 
        limit--;
 
        if(!count)
            sortStatus = DONE;
    }
 
    for(int i = 0; i < 10; i++)
        std::cout << std::setw(5) << mass[i];
 
    std::cout << std::endl;
 
    return 0;
}
 
void maxOfMassiv(int massiv[])
{
    static int lim = 9;
 
    int max = massiv[0];
 
    int nTemp = 0;
 
    for(int i = 0; i <= lim; i++)
        if(massiv[i] > max)
        {
            nTemp = i;
            max = massiv[i];
        }
 
    if(nTemp != lim)
    {
        massiv[nTemp] += massiv[lim];
        massiv[lim] = massiv[nTemp] - massiv[lim];
        massiv[nTemp] -= massiv[lim];
    }
 
    lim--;
}
Yandex
Объявления
30.11.2011, 14:47     Как работает метод Пузырька?
Ответ Создать тему
Опции темы

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