实现原理: 对比二进制位.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} type TIntArr = array of Integer; {极快的正整数排序函数} procedure IntSort(arr:TIntArr; low:Integer=0; high:Integer=-1; k:Cardinal=$80000000; c:Cardinal=1); var i,j,x: Integer; begin if high = -1 then high := Length(arr) -1; i := low; j := high; while (i < j) do begin while (arr[j] and k <> 0) and (i < j) do Dec(j); while (arr[i] and k = 0) and (i < j) do Inc(i); if i < j then begin x := arr[j]; arr[j] := arr[i]; arr[i] := x; end else begin if arr[j] and k <> 0 then Dec(i) else Inc(j); Break; end; end; if k > c then begin if low < i then IntSort(arr, low, i, k div 2); if j < high then IntSort(arr, j, high, k div 2); end; end; {测试} procedure TForm1.Button1Click(Sender: TObject); var MyArr: TIntArr; i: Integer; t: Int64; begin SetLength(MyArr, MAXWORD); for i := Low(MyArr) to High(MyArr) do MyArr[i] := Random(MaxInt); t := GetTickCount; IntSort(MyArr); //调用排序函数 Text := IntToStr(GetTickCount - t); Memo1.Clear; for i := 0 to Length(MyArr)-1 do begin if i mod 1000 = 0 then Memo1.Lines.Add(IntToStr(MyArr[i])); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; Memo1.Align := alLeft; Memo1.ScrollBars := ssVertical; end; end.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2008-05-01 获取窗口边框的宽度和标题栏的高度
2008-05-01 演示 Rect、Bounds 生成 TRect 的区别
2008-05-01 创建异形窗口[6]