Как упорядочить массив по возрастанию в pascal?

Пользователь

от nicola , в категории: Другие , 2 года назад

Как упорядочить массив по возрастанию в pascal?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

P

Пользователь

от Programmer , 2 года назад

@nicola Добрый день!

Для упорядочивания массива по какому либо признаку используются сортировки.

Существует много алгоритмов сортировок, например сортировка методом пузырька:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
var
    arr: array[1..m] of integer;
    i, j, k: integer;
 
begin 
    ...

    for i := 1 to m-1 do
        for j := 1 to m-i do
            if arr[j] > arr[j+1] then 
            begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k
            end;
end;


Пользователь

от vladimir , 10 месяцев назад

@nicola 

Для упорядочивания массива по возрастанию в Pascal можно воспользоваться встроенной процедурой Sort, которая принимает массив и его размер и сортирует его по возрастанию.


Пример:

1
2
3
4
5
6
7
8
var
  arr: array[1..10] of integer = (5, 2, 7, 1, 8, 4, 9, 3, 10, 6);
  i: integer;
begin
  Sort(arr, sizeof(arr) div sizeof(arr[0]), SizeOf(integer), @CompareInteger);
  for i := 1 to 10 do
    Write(arr[i], ' ');
end.


В этом примере массив arr сортируется с помощью процедуры Sort, которая принимает следующие параметры:

  • arr - сортируемый массив;
  • sizeof(arr) div sizeof(arr[0]) - количество элементов в массиве;
  • SizeOf(integer) - размер каждого элемента массива (в данном случае integer);
  • @CompareInteger - указатель на функцию-компаратор, которая сравнивает два элемента массива и возвращает результат сравнения.


Функция-компаратор CompareInteger, передаваемая по указателю, должна иметь следующий вид:

1
2
3
4
5
6
7
8
9
function CompareInteger(Item1, Item2: Pointer): Integer; cdecl;
begin
  if PInteger(Item1)^ < PInteger(Item2)^ then
    Result := -1
  else if PInteger(Item1)^ > PInteger(Item2)^ then
    Result := 1
  else
    Result := 0;
end;


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