?? fto3.pas
字號(hào):
unit fto3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin, ComCtrls, Menus;
type
arr=array [1..10] of integer;
pointer=^node;
node=record
a:array [1..3] of integer;
next:pointer;
end;
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
SpinEdit4: TSpinEdit;
SpinEdit5: TSpinEdit;
SpinEdit6: TSpinEdit;
SpinEdit7: TSpinEdit;
SpinEdit8: TSpinEdit;
SpinEdit9: TSpinEdit;
SpinEdit10: TSpinEdit;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label2: TLabel;
SpinEdit11: TSpinEdit;
Label4: TLabel;
SpinEdit12: TSpinEdit;
Button5: TButton;
Button6: TButton;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Label1: TLabel;
Label3: TLabel;
Label21: TLabel;
Label22: TLabel;
Button14: TButton;
Button15: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
Button13: TButton;
Button16: TButton;
Button17: TButton;
Button18: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
N26: TMenuItem;
procedure ina;
procedure display;
procedure heapfy1(i,j:integer);
procedure heapfy2(i,j:integer);
procedure partition(t,h:integer);
procedure merge(p,q,r:integer;var a,b:arr);
procedure move(i,j:integer;var a,b:arr);
procedure scan(l:integer;var a,b:arr);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure N24Click(Sender: TObject);
procedure N26Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
min=-32767;
var
Form1: TForm1;
a:array [-4..10] of integer;
n,c,v,e:integer; //n為數(shù)組長(zhǎng)度,
//c為比較次數(shù),v為移動(dòng)次數(shù),e為合并排序中數(shù)組B的指針。
implementation
{$R *.DFM}
procedure TForm1.ina;
//初始化數(shù)組及部分公共變量。
begin
c:=0;
v:=0;
a[1]:=spinedit1.Value;
a[2]:=spinedit2.Value;
a[3]:=spinedit3.Value;
a[4]:=spinedit4.Value;
a[5]:=spinedit5.Value;
a[6]:=spinedit6.Value;
a[7]:=spinedit7.Value;
a[8]:=spinedit8.Value;
a[9]:=spinedit9.Value;
a[10]:=spinedit10.Value;
n:=spinedit12.Value;
end;
procedure TForm1.display;
//顯示排列好的數(shù)。
begin
edit1.text:=inttostr(a[1]);
edit2.text:=inttostr(a[2]);
edit3.text:=inttostr(a[3]);
edit4.text:=inttostr(a[4]);
edit5.text:=inttostr(a[5]);
edit6.text:=inttostr(a[6]);
edit7.text:=inttostr(a[7]);
edit8.text:=inttostr(a[8]);
edit9.text:=inttostr(a[9]);
edit10.text:=inttostr(a[10]);
label21.Caption:=inttostr(c);
label22.Caption:=inttostr(v);
if label21.Caption='0' then label21.Caption:='';
if label22.Caption='0' then label22.Caption:='';
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.Button6Click(Sender: TObject);
var i,j,x,t,l:integer;
//排為三段,用的是快速排序劃分子段的思想。
begin
ina;
x:=spinedit11.Value;
i:=1;
j:=n;
t:=0;
l:=0;
while i<j do
begin
while (a[i]<x) and (i<j) do i:=i+1;
if i<j then t:=a[i];
while (a[j]>=x) and (i<j) do j:=j-1;
if i<j then
begin
a[i]:=a[j];
a[j]:=t;
i:=i+1;
j:=j-1;
end;
end;
if (a[i]<x) and (i<n) then i:=i+1;
l:=i;
j:=n;
while i<j do
begin
while (a[i]=x) and (i<j) do i:=i+1;
if i<j then t:=a[i];
while (a[j]>x) and (i<j) do j:=j-1;
if i<j then
begin
a[i]:=a[j];
a[j]:=t;
i:=i+1;
j:=j-1;
end;
end;
if a[i]=x then j:=i+1;
i:=l;
display;
label7.Caption:='1-'+inttostr(i-1)+';';
if a[i]=x then
label9.Caption:=inttostr(i)+'-'+inttostr(j-1)+';'
else label9.Caption:='無;';
label10.Caption:=inttostr(j)+'-'+inttostr(n)+';';
end;
procedure TForm1.Button7Click(Sender: TObject);
//隨機(jī)選數(shù)。
begin
Randomize;
spinedit1.Value:=random(20);
spinedit2.Value:=random(20);
spinedit3.Value:=random(20);
spinedit4.Value:=random(20);
spinedit5.Value:=random(20);
spinedit6.Value:=random(20);
spinedit7.Value:=random(20);
spinedit8.Value:=random(20);
spinedit9.Value:=random(20);
spinedit10.Value:=random(20);
spinedit11.Value:=random(20);
end;
procedure TForm1.Button1Click(Sender: TObject);
//直接插入排序。
var x,i,j:integer;
begin
ina;
a[0]:=min;
for i:=2 to n do
begin
x:=a[i];
v:=v+1;
j:=i-1;
while x<a[j] do
begin
a[j+1]:=a[j]; v:=v+1;
c:=c+1;
j:=j-1;
end;
c:=c+1;
a[j+1]:=x; //此處注意是a[j+1]而不是a[j].
v:=v+1;
end;
display;
end;
procedure TForm1.Button2Click(Sender: TObject);
//二分插入排序。
var x,i,j,k,l,h,m:integer;
begin
ina;
for i:=2 to n do
begin
x:=a[i]; v:=v+1;
l:=1;
h:=i-1;
while l<=h do
begin
m:=(l+h) div 2;
if x<a[m] then h:=m-1
else l:=m+1;
c:=c+1;
end;
c:=c+1;
for k:=i-1 downto l do //此處注意l的妙用.
begin a[k+1]:=a[k]; v:=v+1; end;
a[l]:=x; v:=v+1;
end;
display;
end;
procedure TForm1.Button3Click(Sender: TObject);
//希爾排序。
var x,i,j,k,l,h,m:integer;
d:array [1..3] of integer;
begin
ina;
d[1]:=5; //如果想讓這個(gè)數(shù)字更大些,請(qǐng)先將數(shù)組a的下標(biāo)擴(kuò)大。
d[2]:=3;
d[3]:=1;
for i:=1-d[1] to 0 do
a[i]:=min;
for h:=1 to 3 do
begin
k:=d[h];
for i:=k+1 to n do
begin
x:=a[i]; v:=v+1;
j:=i-k;
while x<a[j] do
begin
a[j+k]:=a[j]; v:=v+1; c:=c+1;
j:=j-k;
end;
c:=c+1;
a[j+k]:=x; v:=v+1;
end;
end;
display;
end;
procedure TForm1.Button4Click(Sender: TObject);
//交換排序(氣泡排序)。
var x,i,j,k,flag:integer;
begin
ina;
k:=n-1;
flag:=1;
while flag>0 do
begin
flag:=0;
for i:=1 to k do
begin
if a[i]>a[i+1] then
begin
x:=a[i];
a[i]:=a[i+1];
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -