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

Одностageвoe peшenie: paccтaнoвкa nulей в конец masciva

Delphi , Базы данных , Сортировка и Фильтр

Одностageвoe peшение: paccтaнoвкa nulей в конец masciva

При работе с массивами целых чисел иногда возникает потребность отсортировать их таким образом, чтобы нули находились в конце, а остальные элементы сохраняли свой порядок. В этом материале мы рассмотрим, как решить эту задачу в один проход, используя язык программирования Pascal и среду разработки Delphi.

Описание проблемы

Нужно отсортировать массив целых чисел так, чтобы нули находились в конце, а остальные элементы сохраняли свой порядок. Например, массив [0, 0, 3, 1, 2] должен быть отсортирован следующим образом: [1, 2, 3, 0, 0].

Известный подход заключается в двух этапах сортировки: сначала сортируются элементы, отличные от нуля, а затем нули перемещаются в конец массива. Однако этот подход может приводить к некорректным результатам, так как он не учитывает порядок элементов, отличных от нуля.

Решение проблемы

Для решения этой задачи в один проход можно использовать сравнение элементов с учетом их значения и наличия нулей. Ниже приведен пример кода на Object Pascal (Delphi), который решает эту задачу:

procedure SortArrayWithZerosLast(var Arr: TArray<Integer>);
begin
  TArray.Sort<Integer>(Arr, TComparer<Integer>.Construct(function(const Left, Right: Integer): Integer
    begin
      if (Left = 0) and (Right = 0) then
        Result := 0
      else if (Left = 0) then
        Result := 1
      else if (Right = 0) then
        Result := -1
      else if (Left < Right) then
        Result := -1
      else if (Left > Right) then
        Result := 1
      else
        Result := 0;
    end
  ));
end;

Этот код определяет процедуру SortArrayWithZerosLast, которая принимает в качестве параметра массив целых чисел и сортирует его в соответствии с описанными выше правилами. Функция сравнения элементов учитывает наличие нулей и их порядок, что позволяет отсортировать массив в один проход.

Пример использования

Пример использования процедуры SortArrayWithZerosLast приведен ниже:

var
  Arr: TArray<Integer>;
begin
  SetLength(Arr, 5);
  Arr[0] := 0;
  Arr[1] := 0;
  Arr[2] := 3;
  Arr[3] := 1;
  Arr[4] := 2;

  SortArrayWithZerosLast(Arr);

  // Результат: [1, 2, 3, 0, 0]
end;

В этом примере массив [0, 0, 3, 1, 2] сортируется с помощью процедуры SortArrayWithZerosLast, и результат – массив [1, 2, 3, 0, 0], в котором нули находятся в конце, а остальные элементы сохраняют свой порядок.

Заключение

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

Создано по материалам из источника по ссылке.

Материал описывает однопроходное решение задачи по расстановке нулей в конце массива целых чисел на языке программирования Pascal в среде Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:10:28/0.0097270011901855/0