首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi :排序列表

Delphi :排序列表
EN

Stack Overflow用户
提问于 2010-03-21 11:08:04
回答 2查看 5.6K关注 0票数 3

我需要在Delphi中对接近1,00000个浮点数条目进行排序。我是Delphi的新手,想知道有没有现成的解决方案。我尝试了一些语言提供的构造,它们花费了大量的时间来运行到完成(对于应用程序来说,5-10秒的执行时间就足够了)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-21 12:18:24

为什么不直接实现一个快速排序算法呢?

请看下面的简单代码

代码语言:javascript
复制
program ProjectSortFoat;

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure QuickSort(var List: array of Double; iLo, iHi: Integer) ;
var
  Lo       : integer;
  Hi       : integer;
  T        : Double;
  Mid      : Double;
begin
  Lo := iLo;
  Hi := iHi;
  Mid:= List[(Lo + Hi) div 2];
  repeat

    while List[Lo] < Mid do Inc(Lo) ;
    while List[Hi] > Mid do Dec(Hi) ;

    if Lo <= Hi then
    begin
      T := List[Lo];
      List[Lo] := List[Hi];
      List[Hi] := T;
      Inc(Lo);
      Dec(Hi);
    end;

  until Lo > Hi;

  if Hi > iLo then QuickSort(List, iLo, Hi);
  if Lo < iHi then QuickSort(List, Lo, iHi);

end;



const
Elements = 1000000;
var
  doubleArray : array of Double;
  i           : integer;
  t           : TDateTime;
begin
  SetLength(doubleArray,Elements);
  try
    t:=Now;
    Writeln('Init Generating '+FormatFloat('#,',Elements)+' random numbers ');
    for i:=low(doubleArray) to high(doubleArray) do
    doubleArray[i]:=Random(10000000)+Random; //can be improved
    Writeln('Elapsed '+FormatDateTime('HH:NN:SS.ZZZ',Now-t));

    t:=Now;
    Writeln('Sorting '+FormatFloat('#,',Elements)+' random numbers ');
    QuickSort(doubleArray, Low(doubleArray), High(doubleArray)) ;
    Writeln('Elapsed '+FormatDateTime('HH:NN:SS.ZZZ',Now-t));

  finally
  Finalize(doubleArray);
  end;
  Readln;
end.

在我的机器中,排序1.000.000浮点数的执行时间是0.167秒。

如果您使用的是Delphi7或其他旧版本(我不知道新版本中是否存在),您可以查看

Delphi7 C:\Program Files\Borland\

\Demos\Thread

路径,对于一个很酷的演示应用程序使用不同的排序算法和线程。

票数 14
EN

Stack Overflow用户

发布于 2010-03-21 11:24:55

您使用的是什么版本?如果你使用的是Delphi2009或2010,你可以使用泛型来生成一个TList<real>并调用它的排序方法。

如果您使用的是早期版本,那么非泛型TList也有一个Sort方法,但它的设置有点复杂,因为它使用指针,而您可能希望用作浮点数的Real (或Double)太大,无法转换为指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2485750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档