Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отсортировать эл-ты в 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]

по алфавиту?


Наверх

Титульная страница Поиск, карта сайта Написать письмо