Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Внизможно ли сортировать массив? Найти похожие ветки
← →
MadGhost (2003-09-12 10:52) [0]добрый день всем мастерам, скажите пожалйуста,
есть массив из записи примерно привожу
type
a=record
anum:char[8];
bnum:char[15];
day:char[2];
month:char[2];
year:char[4];
time:char[8];
end;
массив большой, примерно около 7500 записей, сортировать нужно по полю anum,day,month, и time желательно.
я просто с сортировкой в первые сталкиваюсь, и ниче про это не знаю :(
← →
Владислав (2003-09-12 10:53) [1]Можно.
← →
MadGhost (2003-09-12 10:57) [2]:))) а как?
← →
Владислав (2003-09-12 11:00) [3]Используй алгоритм быстрой сортировки. Эго реализацию можешь увидеть в TStringList.CustomSort, например. Как сравнивать значения полей в записи, надеюсь, не надо объяснять? :)
← →
афвуд (2003-09-12 11:01) [4]function Compare(A1,A2:a):integer;
begin
if A1.anum>A2.anum then begin result=1; exit;
if A2.anum>A1.anum then begin result=2; exit;
if A1.bnum>A2.bnum then begin result=1; exit;
if A2.bnum>A1.bnum then begin result=2; exit;
if A1.day>A2.day then begin result=1; exit;
if A2.day>A1.day then begin result=2; exit;
if A1.time>A2.time then begin result=1; exit;
if A2.time>A1.time then begin result=2; exit;
end;
//Сама сортировка:
f:array of a;//типы надо по нормальному называть а не так
begin
//сюда вставишь любой алгоритм сортировки
//их можно найти - выберешь там алгоритм слиянием
//он один из самых быстрых
end;
//и последнее замечание
//в функции сравнение придётся тебе сначала
//преобразовывать данные. Допустим дату из char в DateTime
//а уж потом сравнивать
← →
[lamer]Barmaglot (2003-09-12 11:02) [5]Если быстро, то используй указатели. Если скорость пофигу, можно массивы или сделать 4 базы каждую упорядочить так как тебе надо и т.д.
Обычно сортируют сравнивая две записи в таблице по порядку, пока не дойдешь до конца.
Если быстро, то все намного сложнее смотри http://algolist.manual.ru/
← →
афвуд (2003-09-12 11:02) [6]Надеюсь понятно как юзать функцию Compare?
← →
Serginio666 (2003-09-12 14:17) [7]Посмотри
http://www.rsdn.ru/Forum/Message.aspx?mid=377407&only=1
Правда замени
Move(Pointer(BeginArray +((((L+R-BeginArray-BeginArray) div len) shr 1)* len ))^,MidlVar^,Len);
на
Move(Pointer(L +((((R-l) div len) shr 1)* len ))^,MidlVar^,Len);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c