unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls, Grids;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
SG: TStringGrid;
Button1: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
function partition(p,q:Integer;A:Array of Integer):Integer;
procedure Quick_Sort(p,q:Integer;A:Array of Integer);
{ Public declarations }
end;var
Form1: TForm1;
A:Array[1..100] of Integer;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 99 do
begin
SG.Rows[i].Text:=IntToStr(Random(10000));
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i,j,k,t:Integer;
begin
for i:=0 to 99 do
begin
A[i]:=StrToInt(Trim(SG.Rows[i].Text));
end;
for j:=1 to 99 do
begin
for k:=0 to (99-j) do
begin
if A[k]>A[k+1] then
begin
t:=A[k];
A[k]:=A[k+1];
A[k+1]:=t;
end;
end;
end;
for i:=0 to 99 do
begin
SG.Rows[i].Text:=IntTostr(A[i]);
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 100 do
begin
A[i]:=StrToInt(Trim(SG.Rows[i-1].Text));
end; Quick_Sort(1,100,A);
for i:=1 to 100 do
begin
SG.Rows[i-1].Text:=IntTostr(A[i]);
end;
end;procedure TForm1.Quick_Sort(p,q:Integer;A:Array of Integer);
var
r:Integer;
begin
r:=partition(p,q,A);
Quick_Sort(p,r,A);
Quick_Sort(r+1,q,A);
end;Function TForm1.partition(p,q:Integer;A:Array of Integer):Integer;
var
t,j,k,m:Integer;
begin
t:=A[p];
j:=p-1;
k:=q+1;
while true do
begin
repeat k:=k-1 until A[k]<=t;
repeat j:=j+1 until A[j]>=t;
if j<k then
begin
m:=A[j];
A[j]:=A[k];
A[k]:=m;
end
else if k<>100 then
begin
partition:=k;
exit;
end
else
begin
partition:=(k-1);
exit;
end;
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls, Grids;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
SG: TStringGrid;
Button1: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
function partition(p,q:Integer;A:Array of Integer):Integer;
procedure Quick_Sort(p,q:Integer;A:Array of Integer);
{ Public declarations }
end;var
Form1: TForm1;
A:Array[1..100] of Integer;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 99 do
begin
SG.Rows[i].Text:=IntToStr(Random(10000));
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i,j,k,t:Integer;
begin
for i:=0 to 99 do
begin
A[i]:=StrToInt(Trim(SG.Rows[i].Text));
end;
for j:=1 to 99 do
begin
for k:=0 to (99-j) do
begin
if A[k]>A[k+1] then
begin
t:=A[k];
A[k]:=A[k+1];
A[k+1]:=t;
end;
end;
end;
for i:=0 to 99 do
begin
SG.Rows[i].Text:=IntTostr(A[i]);
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 100 do
begin
A[i]:=StrToInt(Trim(SG.Rows[i-1].Text));
end; Quick_Sort(1,100,A);
for i:=1 to 100 do
begin
SG.Rows[i-1].Text:=IntTostr(A[i]);
end;
end;procedure TForm1.Quick_Sort(p,q:Integer;A:Array of Integer);
var
r:Integer;
begin
r:=partition(p,q,A);
Quick_Sort(p,r,A);
Quick_Sort(r+1,q,A);
end;Function TForm1.partition(p,q:Integer;A:Array of Integer):Integer;
var
t,j,k,m:Integer;
begin
t:=A[p];
j:=p-1;
k:=q+1;
while true do
begin
repeat k:=k-1 until A[k]<=t;
repeat j:=j+1 until A[j]>=t;
if j<k then
begin
m:=A[j];
A[j]:=A[k];
A[k]:=m;
end
else if k<>100 then
begin
partition:=k;
exit;
end
else
begin
partition:=(k-1);
exit;
end;
end;
end;end.
解决方案 »
- 网吧的万象网管?求解!
- Delphi7的问题,希望大家帮忙解决
- Oracle 中类似 sql server2000中的 CROSS JOIN 表连接.怎么写?
- DELPHI5使用控件遇到的問題
- 那位高手能给我讲件ClientDataSet的用法?
- 请问在delphi中做界面设计的时候,需要哪些方面的知识?
- 请问如何利用ADOQuery来判断一张表是否存在呢?????????
- 关于ExcelApplication的问题,望指教
- ADOQuery 和 DBGrid 中用ADOQuery.insert; 插入记录全跑到表格的最后?何故 100分!
- 如何利用Tquery组件和Tdbgrid修改数据?
- MenuItem 的 Hint 怎么没用?
- 如何取出数据库最近日期?
begin
// A[i]:=StrToInt(Trim(SG.Rows[i].Text));有A[0]
end;
//A:Array[1..100] of Integer;这里好象有问题了;下标不一样;
begin
// A[i]:=StrToInt(Trim(SG.Rows[i].Text));有A[0]
end;
//A:Array[1..100] of Integer;对就是这里!你下标定义的是从1到100,而打循环体是从0到99,当然出错!!
要么你这样A:Array[1..100] of Integer;
要么你这样
for i:=1 to 100 do
begin
// A[i]:=StrToInt(Trim(SG.Rows[i].Text));有A[0]
end;