在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
{
这段代码存在的目的不是在研究这3个排序的算法,
这段代码存在的目的是如何用这3个排序函数,并且选出一个排序速度最快的函数 面对实际应用
}
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Memo2: TMemo; Edit1: TEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} {选择排序} procedure selectrank(var a:array of integer;maxtomin:boolean); var i,j,t:integer; begin if maxtomin then //由大到小 begin for i:=low(a) to high(a)-1 do for j:=i+1 to high(a) do if a[i]<a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; end else //由小到大 begin for i:=low(a) to high(a)-1 do for j:=i+1 to high(a) do if a[i]>a[j] then //关键区别是符号 begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; end; end; {快速排序} procedure speedrank(var a:array of integer;maxtomin:boolean); var i,j,t:integer; flag:boolean; begin if maxtomin then //由大到小 begin i:=1; repeat flag:=true; for j:=low(a) to high(a)-i do if a[j]<a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; flag:=false; end; i:=i+1; until flag; end//end if else //由小到大 begin i:=1; repeat flag:=true; for j:=low(a) to high(a)-i do if a[j]>a[j+1] then //关键点是大于好还是小于号 begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; flag:=false; end; i:=i+1; until flag; end; end; {冒泡排序法} procedure bublerank(var a:array of integer;maxtomin:boolean); var i,j,t:integer; begin if maxtomin then //由大到校排序 begin for i:=low(a) to high(a)-1 do for j:=low(a) to high(a)-i-1 do if a[j]<a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; end else //由小到大排序 begin for i:=low(a) to high(a)-1 do for j:=low(a) to high(a)-i-1 do if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; end; end; var A: Array of Integer;{共有部分} {1/2产生13个随机数组} procedure TForm1.Button1Click(Sender: TObject); var i:integer;{1/2产生随机数并给数组赋值} begin Memo1.Clear; SetLength(A,StrToInt(Edit1.Text));//动态数组的长度 for i:=Low(A) to High(A) do begin Randomize; a[i]:=Random(100); Memo1.Lines.Add(IntToStr(a[i]));{} end; end; {2/2排序} procedure TForm1.Button2Click(Sender: TObject); var i:integer; {2/2重小到大排序->取最小值} begin Memo2.Clear; // for i:=Low(A) to High(A) do begin speedrank(a,False); {排序} Memo2.Lines.Add(Format('%d',[a[i]])); {显示结果} end; if A<>nil then Button2.caption:=Format('min=%d',[a[0]]);{取出最小值:从小到大排序的最终结果 最小值就是第1位} A:=nil;{排完序后立即释放动态数组} end; end. 附件列表
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论