Вниз
Скачать: CL | DM;

можно ли сортировать массив?   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.016 c
1-82314
AndB
2003-09-12 05:51
2003.09.25
uses Windows, Forms, Menus, ... частично?


3-82114
XQuest
2003-09-04 09:23
2003.09.25
Rave Reports против Crystal Reports


14-82409
Knight
2003-09-04 03:58
2003.09.25
Dial-Up под Win2k


6-82360
mma
2003-07-12 14:52
2003.09.25
Проверка прокси?


14-82391
Nik8.
2003-09-05 12:32
2003.09.25
Документация




   Наверх