l

Сортировка массива методом пузырька

22.11.2025 105 Программируем на Паскале Ваш комментарий pascal, паскаль

Сегодняшний урок является продолжением предыдущего. В прошлом уроке мы, в частности, говорили о массивах. Сегодня поговорим о сортировке элементов массива. Для этого существует множество методов. Сегодня мы разберём один из них «метод пузырька».

Для простоты, будем использовать программу из прошлого урока. В этот раз она послужит нам заготовкой. Из листинга этой программы, например, видно, что количество элементов нашего массива мы задаём через константу. Поступаем так мы для того, чтобы число, отвечающее за это, было задано один раз и в самом начале программы. И если его потребуется изменить, сделать это будет можно быстро и искать его долго не придётся.

Когда число элементов массива задано, с помощью цикла FOR мы заставляем пользователя внести с клавиатуры все эти элементы, в нашем случае — целые числа. Следует помнить, что не нужно горячиться, не нужно на этапе обучения задавать это число большим хотя бы до тех пор, пока элементы массива с клавиатуры вводим мы сами.

Когда целые числа будут нами получены, мы отсортируем значения элементов массива по возрастанию или убыванию значений этих чисел.

Суть метода: Первый элемент массива сравнивается со всеми остальными: вторым, третьим и т. д. Если он больше или меньше очередного элемента (это зависит от направления сортировки массива), то мы меняем эти элементы местами. Когда первый элемент сравнили со всеми остальными, переходим ко второму — его сравниваем с третьим и всеми последующими. И так происходит до предпоследнего элемента, который сравнивается с самым последним. Замены проводятся на каждом этапе.

Таким образом, любой элемент массива на каждом этапе сортировки может меняться местами с другими его элементами. Всплывает как пузырёк воздуха в газировке или игристом вине. Такое вот поэтическое сравнение. Следует понимать, что значения элементов, полученные на начальном этапе с клавиатуры (или любым другим путём) остаются прежними. В результате сортировки меняется порядок их следования в массиве. Иными словами, меняются индексы элементов — их порядковые номера.

Совсем скоро я приведу пример листинга программы, где мы отсортируем наш массив, например, по возрастанию. Что же нам потребуется для реальной замены элементов массива? У нас объявлен массив целых чисел. Технически это значит, что где-то в оперативной памяти компьютера отводится по два байта для хранения каждого элемента массива — целого числа. И если мы в элемент с конкретным индексом сразу сохраним значение другого, то первый из них будет потерян. Чтобы так не происходило, нам нужно в программе объявить дополнительную переменную (в нашем случае целочисленную), в которой мы и будем временно хранить значение первого элемента.

Разберём это на примере. Допустим, у нас имеются переменные «a» и «b», в которых имеются какие-то значения — например, 3 и 5. Чтобы поменять их местами, мы объявим ещё одну переменную того же типа, например — «c». Сначала в новую переменную «c» присвоим значение одной из переменных, например «a». Теперь в «c» хранится число 3 и оно никуда не денется. Вторым шагом в переменную «a» мы сохраним значение из переменной «b». На этом этапе и в «a», и в «b» будет храниться число 5. Третьим действием мы в переменную «b» положим число из нашей временной переменной «c». Теперь a = 5, b = 3, а значение временной переменной «c» нас больше не интересует. Главное, что «a» и «b» поменялись местами и их значения не утеряны.

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

Менять местами в программе мы будем элементы массива типа Integer. Для этого я объявлю целочисленную переменную «c». Для сравнения очередного элемента массива со всеми последующими, нам потребуются вложенные друг в друга циклы FOR. И, как следствие, ещё одна целочисленная переменная.

В приведённом ниже листинге 1 мы отсортируем элементы массива по-возрастанию.

Листинг 1.

program ArraySortingFor;

const
  N = 5; // Количество элементов массива
  
var
  mas: array[1..N] of Integer;
  i, j, c: Integer;
  
BEGIN
  writeln('Вам необходимо внести ', N, ' целых чисел.');
  for i := 1 to N do begin
    write(i, ': ');
	readln(mas[i]);
  end;
  writeln('Неотсортированный массив', mas);
  
  // Сортировка массива от А до Я
  for i := 1 to N-1 do
    for j := i+1 to N
	  if mas[i] > mas[j] then do begin
	    c := mas[i];
		mas[i] := mas[j];
		mas[j] := c;
   	  end;
  writeln('Отсортированный по-возрастанию массив', mas);
  
  readln;
END.

Требуются буквально «косметические» перемены всего в паре мест программы, чтобы сортировка получилась в обратном направлении — по-убыванию.

Листинг 2.

program ArraySortingFor;

const
  N = 5; // Количество элементов массива
  
var
  mas: array[1..N] of Integer;
  i, j, c: Integer;
  
BEGIN
  writeln('Вам необходимо внести ', N, ' целых чисел.');
  for i := 1 to N do begin
    write(i, ': ');
	readln(mas[i]);
  end;
  writeln('Неотсортированный массив', mas);
  
  // Сортировка массива от Я до А
  for i := 1 to N-1 do
    for j := i+1 to N
	  if mas[i] < mas[j] then do begin
	    c := mas[i];
		mas[i] := mas[j];
		mas[j] := c;
   	  end;
  writeln('Отсортированный по-убыванию массив', mas);
  
  readln;
END.

Репозиторий листингов программ.

https://youtu.be/-_cwJkAbYeI
https://vkvideo.ru/playlist/-207954158_1/video-207954158_456239021?linked=1
https://rutube.ru/video/d1defd03c9ac861fa52903ebfb5ed65f/

Теги раздела

pascal (25), паскаль (25)

Оставьте ваш отзыв: