Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизКак отсортировать эл-ты в TStringGrid ??? Найти похожие ветки
← →
JC (2002-08-19 00:15) [0]^^^
← →
^Sanya (2002-08-19 00:17) [1]по алфавиту?
← →
JC (2002-08-19 00:27) [2]Конечно,а как ещё?
← →
Ученик (2002-08-19 00:59) [3]procedure SortStringGrid(StringGrid: TStringGrid; Col, L, R: Integer);
var
I, J, P: Integer;
Temp : TStringList;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while StringGrid.Cells[Col, i] < StringGrid.Cells[Col, P] do
Inc(I);
while StringGrid.Cells[Col, j] > StringGrid.Cells[Col, P] do
Dec(J);
if I <= J then
begin
Temp := TStringList.Create;
try
Temp.Assign(StringGrid.Rows[i]);
StringGrid.Rows[i].Assign(StringGrid.Rows[j]);
StringGrid.Rows[j].Assign(Temp)
finally
Temp.Free
end;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
SortStringGrid(StringGrid, Col, L, J);
L := I;
until I >= R
end;
← →
Ученик (2002-08-19 01:01) [4]Вызов: SortStringGrid(StringGrid1, 1, 1, StringGrid1.RowCount - 1);
← →
JC (2002-08-19 01:03) [5]Ученик - Что такое L{eft}, R{ight}: Integer??
← →
Ученик (2002-08-19 08:46) [6]L - начальная сортируемая строка StringGrid-a, R-конечная сортируемая строка StringGrid-a, это алгоритм быстрой сортировки (QuickSort), не узнали ? :)))
← →
JC (2002-08-19 16:36) [7]Работает он как-то не так!!! При сортировке SortStringGrid(StringGrid1, 0, 1, StringGrid1.RowCount - 1); Он сортирует только первую колонку, при повторном вызове результат изменяется ( В
← →
Ученик (2002-08-19 16:49) [8]>JC © (19.08.02 16:36)
Сортирует он по колонке, которая передана в качестве параметра, при повторном вызове процедуры с теми же параметрами результат не меняется.
Если необходимо другое сравнение, то меняются строки
while StringGrid.Cells[Col, i] < StringGrid.Cells[Col, P] do
Inc(I);
while StringGrid.Cells[Col, j] > StringGrid.Cells[Col, P] do
Dec(J);
← →
JC (2002-08-19 17:06) [9]Ученик ты вообще это... пробывал та что зделал? B-)
← →
Ученик (2002-08-19 17:11) [10]>JC © (19.08.02 17:06)
Да
← →
Ученик (2002-08-19 17:17) [11]Но, где-то есть ошибка, тестовый пример оказался маленьким
← →
Ученик (2002-08-19 17:31) [12]...
Temp := TStringList.Create;
try
Temp.Assign(StringGrid.Rows[i]);
StringGrid.Rows[i].Assign(StringGrid.Rows[j]);
StringGrid.Rows[j].Assign(Temp)
finally
Temp.Free
end;
if P = I then
P := J
else if P = J then
P := I;
Inc(I);
Dec(J);
...
← →
JC (2002-08-20 14:16) [13]Ладно ту колонку которая указана он сортирует, а остальные
(следующие) оставляет(при первой с одинаковим значением):
1 2 3
1 1 2
2 2 3
А по идее надо:
1 1 2
1 2 3
2 2 3
=-(
← →
Ученик (2002-08-20 14:19) [14]>JC © (20.08.02 14:16)
Ученик © (19.08.02 16:49)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c