Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сортировка массива методом обмена

Delphi , Синтаксис , Сортировка

Сортировка массива методом обмена

В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением — к концу массива (тонут). Поэтому данный метод сортировки обменом иногда называют методом "пузырька". Этот процесс повторяется столько раз, сколько элементов в массиве, минус единица.

procedure TForm1.Button1Click(Sender: TObject);
const
  SIZE = 5;
var
  a: array[1..SIZE] of integer;
  k: integer; // текущий элемент массива
  i: integer; // индекс для ввода и вывода массива
  changed: boolean; // TRUE, если в текущем цикле были обмены
  buf: integer; // буфер для обмена элементами массива
begin
  // ввод массива
  for i := 1 to SIZE do
    a[i] := StrToInt(StringGrid1.Cells[i - 1, 0]);
  label2.caption := '';

  // сортировка массива
  repeat
    Changed := FALSE; // пусть в текущем цикле нет обменов
    for k := l to SIZE - 1 do
      if a[k] > a[k + l] then
      begin // обменяем k-й и k+1-й элементы
        buf := a[k]; a[k] := a[k + l]; a[k + l] := buf;
        changed := TRUE;
      end;

    // вывод массива
    for i := l to SIZE do
      Label2.caption := label2.caption + ' ' + IntTostr(a[i]);
    Label2.caption := label2.caption + #13;
  until
    not changed; // если не было обменов, значит

  // массив отсортирован
  Label2.caption := label2.caption + #13 + 'Maccив отсортирован.';
end;

Следует отметить, что максимальное необходимое количество циклов проверки соседних элементов массива равно количеству элементов массива минус один. Вместе с тем возможно, что массив реально будет упорядочен за меньшее число циклов. Например, последовательность чисел 5 1 2 3 4, если ее рассматривать как представление массива, будет упорядочена за один цикл, и выполнение оставшихся трех циклов не будет иметь смысла.

Поэтому в программу введена логическая переменная changed, которой перед выполнением очередного цикла присваивается значение FALSE. Процесс сортировки (цикл repeat) завершается, если после выполнения очередного цикла проверки соседних элементов массива (цикл for) ни один элемент массива не был обменен с соседним, и, следовательно, массив уже упорядочен.

Сортировка массива методом обмена - это алгоритм, в основе которого лежит обмен соседних элементов массива, повторяющийся столько раз, сколько элементов в массиве, минус единица.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Сортировка ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:19:06/0.0037631988525391/0