Модуль: ЕГЭ-2022. Вопрос 26. Массив чисел. Сортировка


Задача

2/10

Хранение данных и сортировка

Теория

Хранение данных

Примеры
Python Хранение данных
fin = open("26.txt")  # открытие файла
N = int(fin.readline())
data = [0]*N
for i in range(N):
    data[i]=int(fin.readline())
Fin.close() # закрытие файла 
Для хранения данных используем список.
В примере указан способ сохранить все данные в список, в случае если они в файле записаны по одному числу в строке
C++ Чтение данных
#include<vector> 
...
vector  data(N);
for( int i = 0; i < N; i++ ) 
  cin >> data[i];

Проще всего использовать вектор размерностью N.

 
Pascal ABC.net Чтение данных
var data: array of integer;
...
SetLength(data, N);
for var i:=0 to N-1 do
  read(data[i]);
Используем динамический массив^
- считываем число N;
- задаем размер массива (SetLength(data, N););
- заполняем его стандартным образом.
 

Сортировка данных

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

 

Примеры
Python Описание
data.sort() 
Сортировка массива по возрастанию значений.
data.sort(reverse=True) 
Сортировка массива по убыванию значений.
def cmp(n):
    return n % 10
...
data.sort(key=cmp) 

Сортировку по какому-либо другому критерию можно оформить в виде функции, возвращающей значение, по которому следует делать сортировку
(пример описывает функцию, которая возвращает последнюю цифру числа, следовательно сортировка будет происходить по последней цифре). 
Для применения этой функции необходимо в методе sort() прописать аргумент key и присвоить ему имя функции.
data1 = sorted(data, key = cmp)
Если необходимо создать новый отсортированный массив, а старый сохранить, то необходимо использовать функцию  sorted().
data.sort( key = lambda x: (-x[1], x[0]%10) )
При сортировке кортежей, сначала сортировка происходит по первому элементу, затем по второму и т.д. 
Если необходимо поменять порядок, то это можно сделать, используя либо отдельную функцию (как описано выше), так и просто лямбда-функцию.
В данному примере, массив сортируется сначала по убыванию второго элемента (-x[1]), при их равенсстве данные сортируются по возрастанию последней цифры второго элемента кортежа. 
C++ Чтение данных
sort(data.begin(), data.end())
Сортировка вектора по возрастанию.
sort(data.begin(), data.end(), greater <int> ())


или с использованием реверсивного итератора

sort(data.rbegin(), data.rend());
Сортировка массива по убыванию.
bool cmp(int i1, int i2)
{
    return (i1 % 10 < i2 % 10);
}
...
sort( data.begin(), data.end(), cmp);
Сортировка массива по другому критерию (в примере: по возрастанию последней цифры)
Pascal ABC.net Чтение данных
data.Sort;
Сортировка массива по возрастанию.
var data1 := data.OrderBy( x->x mod 10).ToArray;
Пример сортировке по последней цифре по возрастанию (OrderBy), с использованием лямбда-функции. После сортировки создается новый массив.
Для сортировке по убыванию используется OrderByDescending.

Задача

В файле записаны целые положительные числа. В первой строке файла записано число N - количество чисел. В следующих N строках записаны сами числа. В ответе укажите в столбик 10 самых больших трехзначных чисел.

Файл к заданию

Выберите правильный ответ, либо введите его в поле ввода

Комментарий учителя