![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отсортировать эл-ты в TStringGrid ???
JC © (2002-08-19 00:15:00)^^^
Ученик (2002-08-20 14:19:00) [1]>JC © (20.08.02 14:16)
Ученик © (19.08.02 16:49)
JC (2002-08-20 14:16:00) [2]Ладно ту колонку которая указана он сортирует, а остальные
(следующие) оставляет(при первой с одинаковим значением):
1 2 3
1 1 2
2 2 3
А по идее надо:
1 1 2
1 2 3
2 2 3
=-(
Ученик (2002-08-19 17:31:00) [3]...
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);
...
Ученик (2002-08-19 17:17:00) [4]Но, где-то есть ошибка, тестовый пример оказался маленьким
Ученик (2002-08-19 17:11:00) [5]>JC © (19.08.02 17:06)
Да
JC (2002-08-19 17:06:00) [6]Ученик ты вообще это... пробывал та что зделал? B-)
Ученик (2002-08-19 16:49:00) [7]>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 16:36:00) [8]Работает он как-то не так!!! При сортировке SortStringGrid(StringGrid1, 0, 1, StringGrid1.RowCount - 1); Он сортирует только первую колонку, при повторном вызове результат изменяется ( В
Ученик (2002-08-19 08:46:00) [9]L - начальная сортируемая строка StringGrid-a, R-конечная сортируемая строка StringGrid-a, это алгоритм быстрой сортировки (QuickSort), не узнали ? :)))
JC (2002-08-19 01:03:00) [10]Ученик - Что такое L{eft}, R{ight}: Integer??
Ученик (2002-08-19 01:01:00) [11]Вызов: SortStringGrid(StringGrid1, 1, 1, StringGrid1.RowCount - 1);
Ученик (2002-08-19 00:59:00) [12]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;
JC (2002-08-19 00:27:00) [13]Конечно,а как ещё?
^Sanya (2002-08-19 00:17:00) [14]по алфавиту?