procedure Sort(var A: TListbox);
procedure QuickSort(var A: TListbox; iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: string;
begin
Lo := iLo;
Hi := iHi;
Mid := A.Items.Strings[(Lo + Hi) div 2];
repeat
while A.Items.Strings[Lo] < Mid do Inc(Lo);
while A.Items.Strings[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A.Items.Strings[Lo];
A.Items.Strings[Lo] := A.Items.Strings[Hi];
A.Items.Strings[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi);
if Lo < iHi then QuickSort(A, Lo, iHi);
end;
begin
if A.Count>1 then
begin
QuickSort(A, 0, A.Count-1);
end;
end;
这个自己修改的正序的,不会倒序,帮忙改下。
procedure QuickSort(var A: TListbox; iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: string;
begin
Lo := iLo;
Hi := iHi;
Mid := A.Items.Strings[(Lo + Hi) div 2];
repeat
while A.Items.Strings[Lo] < Mid do Inc(Lo);
while A.Items.Strings[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A.Items.Strings[Lo];
A.Items.Strings[Lo] := A.Items.Strings[Hi];
A.Items.Strings[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi);
if Lo < iHi then QuickSort(A, Lo, iHi);
end;
begin
if A.Count>1 then
begin
QuickSort(A, 0, A.Count-1);
end;
end;
这个自己修改的正序的,不会倒序,帮忙改下。
解决方案 »
- 求已解决了命名冲突的“SQLDMO_TLB.PAS”文件......
- 一个简单的编码问题?
- 请教在datamodule里用BDE的database和query,为什么append一条数据就死机?用table就可以?在线等
- DBGridEh+AdoQuery,在DBGridEh中移动到下一条记录,AdoQuery.RecNo却始终为-1,为什么?
- 汉字转拼音问题,太难了
- 有谁知道,DELPHI6过后卸完,而后装DELPHI5会出错, 是为什么吗? (在线等候)送分
- 我用ADO开发的ACCESS数据库难道只要把.exe文件拷贝到目标机就行了吗?
- 请问如何实现用数组控件?比如在窗口上摆100个按纽?谢谢!!!
- 开发模式的简单问题!!!!!!!!
- adoquery的刷新问题
- 如何在StringGrid的一个单元格中为不同的字符显示不同的颜色,并能隐藏指定的字符串高分!
- 请高手指点,急
var i:Integer ;
begin
for i:=ListBox1.Items.Count-1 downto 0 do
begin
ListBox2.Items.Add(ListBox1.Items.Strings[i]);
end;
end;
ListBox1.Sorted :=True
就是我上面的代码,参考delphi自带的快速排序源代码改的,
倒序 数据多的话,先把他们排序,再一个一个倒来过弄,速度太慢
我帮你改一下那个排序吧。
procedure Sort(var A: TListbox);
procedure QuickSort(var A: TListbox; iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: string;
begin
Lo := iLo;
Hi := iHi;
Mid := A.Items.Strings[(Lo + Hi) div 2];
repeat
while A.Items.Strings[Lo] > Mid do Inc(Lo);
while A.Items.Strings[Hi] < Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A.Items.Strings[Hi];
A.Items.Strings[Hi] := A.Items.Strings[Lo];
A.Items.Strings[Lo] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi);
if Lo < iHi then QuickSort(A, Lo, iHi);
end;
begin
if A.Count>1 then
begin
QuickSort(A, 0, A.Count-1);
end;
end;