Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Gulich
0 / 0 / 0
Регистрация: 05.07.2014
Сообщений: 6
#1

Как понять "пузырьковую" сортировку? - C++

05.07.2014, 14:52. Просмотров 320. Ответов 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
int main()
{
    int nums[10];
    int a,b,t;
    int size;
    size=10;
    setlocale(LC_ALL, "RUS");
    for(t=0;t<size;t++) nums[t]=rand();
    cout << "Исходный массив: ";
    for(t=0; t<size;t++) cout << nums[t] << ' ';
    cout << '\n';
    
    for(a=1; a<size; a++)
        for(b=size-1; b>=a; b--) {
            if (nums[b-1] > nums[b]) {
                t = nums[b-1];
                nums[b-1] = nums [b];
                nums[b]=t;
            }
        }
cout << "Отсортированный массив: ";
for(t=0;t<size;t++)
    cout << nums[t] << ' ';
_getch();
return 0;
Не понимаю последнюю половину программы:
C++
1
2
3
4
5
6
7
8
9
10
11
for(a=1; a<size; a++)
        for(b=size-1; b>=a; b--) {
            if (nums[b-1] > nums[b]) {
                t = nums[b-1];
                nums[b-1] = nums [b];
                nums[b]=t;
            }
        }
cout << "Отсортированный массив: ";
for(t=0;t<size;t++)
    cout << nums[t] << ' ';
Прошу разъяснить новичку как это работает.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 14:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как понять "пузырьковую" сортировку? (C++):

В массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по успеваемости по возрастанию - C++
в массиве структур студент с полями &quot;ИМЯ&quot; &quot;ВОЗРАСТ&quot; &quot;УСПЕВАЕМОСТЬ&quot; выполнить сортировку по успеваемости по возрастанию. Использовать...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Не могу понять, как "живут" файловые указатели - C++
Не могу понять как живут файловые указатели... Есть у меня файл, и пишу в него 100 интов. Указатель ввода сдвигается на 400, так и надо....

"динамически выделяет массив указателей на базовый класс" - как это понять? - C++
Что значит вообще массив на класс? Я не совсем понимаю, мы ведь оперируем понятием объекта, а класс - это всего лишь тип. Нам нужно создать...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Разобрать пузырьковую сортировку - C++
Т.к. я новичок в программировании, прошу помочь мне разобраться в исходном коде программы (написать подробные комментарии) или объяснить...

5
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
05.07.2014, 14:58 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Изи. Сортировка "пузырьковая" поскольку:
"лёгкие" элементы встают левее к краю, меняясь с правым соседом если тот "тяжелее"
C++
1
2
3
4
5
6
7
if (nums[b-1] > nums[b]) // если элемент слева больше чем тот, что справа. 
 {
t = nums[b-1]; // поменять их местамии - сперва запоминаем один из элементов
nums[b-1] = nums [b]; // сразу перезаписываем его тем элементом, что по условию "легче" пузырёк
nums[b]=t // и поскольку мы предварительно сохранили знач того, что перезаписали в временную переменную - поменяли элементы местами.
}
;

Пример результата 1 прохода цикла
1
Gulich
0 / 0 / 0
Регистрация: 05.07.2014
Сообщений: 6
05.07.2014, 15:48  [ТС] #3
Какие значения принимает t переменная в этой части программы?
0
rutelun
147 / 73 / 15
Регистрация: 31.05.2014
Сообщений: 215
05.07.2014, 15:54 #4
Gulich, Переменная t нужна, для того чтобы поменять местами два элемента.
1
Gulich
0 / 0 / 0
Регистрация: 05.07.2014
Сообщений: 6
05.07.2014, 15:56  [ТС] #5
Спасибо.
0
rutelun
147 / 73 / 15
Регистрация: 31.05.2014
Сообщений: 215
05.07.2014, 15:56 #6
Есть две переменных a и b. Вы хотите поменять их местами.Для начала сохраняете значение a где-то еще (к примеру в t) и присваиваете a значение b. Потом присваиваете b сохраненное значение
1
05.07.2014, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2014, 15:56
Привет! Вот еще темы с ответами:

Про пузырьковую сортировку - C++
Вопрос: 1). если у нас дан массив 51428, то сколько проходов i совершено? (по моим подсчётам 4, т.к. массив из 5-ти чисел) void...

Как отключить автоматическое добавление "_" "@" "number" к имени экстернального метода? - C++
Здраствуйте! Подскажите как это делается? (вопрос в названии темы) среда : VS2013 проект компилируется в dll файл в начале...

Заменить пузырьковую сортировка на сортировку Шелла - C++
Есть работающая сортировка пузырьковая, через потоки реализована, задача в том что бы вместо пузырьковой была сортировка Шелла, никак пока...

Какой из приведенных кодов реализует Пузырьковую сортировку? - C++
Есть такой цикл сортировки for (i=0;i&lt;n-1;i++) for (j=0;j&lt;n-i-1;j++) if (A&gt;A){ X=A; ...


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

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

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