![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как отсортировать данные, не занося ВСЕХ их в массивы?
Максим © (2012-07-18 17:01:00)В этом участке кода я считываю информацию из текстового файлика и записываю в один массив все фамилии, в другой имена, в третий класс, в четвертый балл. Потом я сортирую массив с баллами и от него беру часть с самыми лучшими баллами.
for n:=1 to 51 do
begin
readln(f,s);
a[n-1].fam:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
a[n-1].nam:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
a[n-1].kls:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
a[n-1].bal:=StrToInt(s);
end;
closefile(f);
lbl2.caption:=inttostr(n);
for i:=0 to n-2 do
for j:=i+1 to n-1 do
if a[i].bal<a[j].bal then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
Так вот, мне необходимо сделать так, чтобы сортировка происходила сразу в момент чтения файла, т.е. не использовать массивы для записи туда всех-всех данных, а работать исключительно с необходимыми (с теми у кого баллы высокие). Как это реализовать?
Сортировка должна происходить только по ПОСЛЕДНЕМУ числу из строки. Строка выглядит так:
Фамилия Имя Класс Балл
Так вот необходимо отсортировать по баллам и отобрать 45 процентов (с самым большим баллом)
Sha (2012-07-19 13:24:00) [1]Про пирамидальную сортировку почитай, авось мысли какие появятся.
P.S. Сортировка тут не требуется.
AV (2012-07-19 12:31:00) [2]считать первые 45% в список(массив)
отсортировать
каждое следующее считанное значение, методом половинного деления, вставить в соответствующую позицию, последний выкинуть.
Медвежонок Пятачок (2012-07-18 17:37:00) [3]стринглист. метод кастомсорт.
если нужен массив, то перенести в массив из стринглиста