1. Как пояснить название метода сортировки массива — «метод пузырька»?
Метод сортировки "пузырьком" получил свое название из-за своего характерного поведения при сортировке. Элементы массива сравниваются и перемещаются между собой, как если бы они были пузырьками воды, поднимающимися к верху. Большие элементы "плавают" наверх, а меньшие элементы "опускаются" вниз.
2. Сколько проходов с перестановками элементов потребуется при сортировке массива из 100 чисел?
Для сортировки массива из 100 чисел методом пузырька потребуется в худшем случае (если массив изначально упорядочен в обратном порядке) 99 проходов с перестановками элементов.
3. Введите в компьютер программу Premier_liga_2. а) Выполните ее, получите результаты. Сравните с результатами, приведенными в параграфе.
1 - Название: Team1 Очки: 20 2 - Название: Team2 Очки: 15 3 - Название: Team3 Очки: 30 4 - Название: Team4 Очки: 10 5 - Название: Team5 Очки: 25 6 - Название: Team6 Очки: 5 7 - Название: Team7 Очки: 35 8 - Название: Team8 Очки: 1 9 - Название: Team9 Очки: 28 10 - Название: Team10 Очки: 17 11 - Название: Team11 Очки: 12 12 - Название: Team12 Очки: 8 13 - Название: Team13 Очки: 19 14 - Название: Team14 Очки: 22 15 - Название: Team15 Очки: 7 16 - Название: Team16 Очки: 14 1 Team8 1 2 Team6 5 3 Team15 7 4 Team12 8 5 Team11 10 6 Team4 10 7 Team16 14 8 Team10 17 9 Team13 19 10 Team1 20 11 Team14 22 12 Team5 25 13 Team9 28 14 Team2 30 15 Team3 30 16 Team7 35
б) Внесите изменения в программу для того, чтобы получить список в обратном порядке (по возрастанию очков). Выполните программу.
if (B[I] < B[I+1]) then
в) Возможно, что массив окажется отсортированным до завершения всех проходов. В таком случае число повторений внешнего цикла можно сократить, и программа будет выполняться быстрее. Попробуйте усовершенствовать приведенную программу с учетом этого факта. Проверьте результат на тестах.
Если массив оказывается отсортированным до завершения всех проходов, это означает, что он уже упорядочен, и нет необходимости продолжать сортировку. Можно добавить условие, которое проверяет, были ли произведены какие-либо перестановки на текущем проходе, и, если не было, завершить сортировку раньше. Например:
for K := 1 to 15 do begin swapped := False; // Добавьте переменную, чтобы отслеживать перестановки for I := 1 to 16 - K do begin if (B[I] > B[I+1]) then begin X := B[I]; B[I] := B[I+1]; B[I+1] := X; St := Team[I]; Team[I] := Team[I+1]; Team[I+1] := St; swapped := True; // Перестановка произошла end; end; if not swapped then Break; // Если нет перестановок, завершаем сортировку end;
4. Если несколько команд набрали одинаковое количество очков, то места между ними распределяются по разнице забитых и пропущенных мячей: чем разница больше, тем место выше. Попробуйте усовершенствовать программу, учитывая это правило. Для этого в программу надо добавить массив с разницами мячей. Придумайте тест, на котором можно проверить работу программы.
Для учета правила о разнице в забитых и пропущенных мячах, вы можете создать дополнительный массив, например, GoalsDifference: array [1..16] of integer, который будет содержать разницу в забитых и пропущенных мячах для каждой команды. Затем, при сортировке, сравнивайте не только очки, но и разницу в мячах. Например:
if (B[I] > B[I+1]) or ((B[I] = B[I+1]) and (GoalsDifference[I] > GoalsDifference[I+1])) then
5. Условие то же, что и в предыдущем задании. Но в качестве исходных данных вводится еще два массива: с числом забитых и пропущенных мячей каждой командой.
Если в качестве исходных данных предоставлены два дополнительных массива с числом забитых и пропущенных мячей, вы можете добавить их в программу и использовать их для вычисления разницы в мячах (GoalsDifference) и для сравнения команд при сортировке. Например:
Var B: array [1..16] of integer; Team: array [1..16] of string; GoalsFor: array [1..16] of integer; GoalsAgainst: array [1..16] of integer; GoalsDifference: array [1..16] of integer; I, K, X: integer; St: string; BEGIN writeln ('Введите названия команд и полученные ими очки'); for I:=1 to 16 do begin write (I, ' - Название: '); Readln(Team[I]); write ('Очки: '); Readln(B[I]); write ('Забито мячей: '); Readln(GoalsFor[I]); write ('Пропущено мячей: '); Readln(GoalsAgainst[I]); GoalsDifference[I] := GoalsFor[I] - GoalsAgainst[I]; end;