Сортировка массива: сначала положительные числа по убыванию, потом отрицательные по возрастанию, потом нули - PascalABC.NET
Формулировка задачи:
Заполнить массив рандомными числами от -100 включительно до 100 включительно. Отсортировать так: сначала идут положительные числа по убыванию, потом отрицательные по возрастанию, потом нули, если есть.
Пример:
Было: 20 -90 15 -34 10 0
Стало: 20 15 10 -90 -34 0
Решение задачи: «Сортировка массива: сначала положительные числа по убыванию, потом отрицательные по возрастанию, потом нули»
textual
Листинг программы
type MySort = class(IComparer<integer>)
public
function Compare(a, b : integer) : integer := (a * b < 0 ? b - a : abs(b) - abs(a));
end;
begin
var a := ArrRandom(ReadLnInteger('n ='), -100, +100);
WriteLn('Массив a:', NewLine, a, NewLine, 'Отсортированный массив:', NewLine, a.OrderBy(v -> v, new MySort));
end.
Объяснение кода листинга программы
В данном коде:
- Объявлен класс
MySort, который реализует интерфейсIComparer<integer>. - В классе
MySortпереопределена функцияCompare, которая реализует алгоритм сортировки массива. - В основной части программы вызывается функция
ArrRandomдля генерации случайного массива. - Пользователю предлагается ввести размер массива с помощью функции
ReadLnInteger. - Выводится на экран исходный массив
a. - Отсортированный массив выводится с помощью метода
OrderBy, где в качестве аргумента передается лямбда-выражениеv -> v, которое означает, что элементы массива сравниваются сами с собой, и конструкторMySort, который создает экземпляр классаMySort.