delphi的快速排序算法

我写了个delphi的快速排序算法,大家看看有什么问题unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,... 我写了个delphi的快速排序算法,大家看看有什么问题

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 quicksort(a:array of integer;left,right:integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
const a:array[0..5] of integer=(9,2,1,5,8,6);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
a:=quicksort(a,0,5);
for i:=0 to 5 do begin
memo1.Lines.Add(inttostr(a[i]));
end;
end;

procedure TForm1.quicksort(a:array of integer;left,right:integer);
var
i,j,povit :Integer;
begin
i := left;
j := right;
povit := a[i];
if(i<j) then begin
while(i<j) do begin
while((i<j) and (a[j]>=povit)) do
dec(j);
if(i<j) then begin
a[i]:=a[j];
inc(i);
end;
while((i<j) and (a[i]<=povit)) do
inc(i);
if(i<j) then begin
a[j]:=a[i];
dec(j);
end;
end;
a[i]:=povit;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
end;
end;

end.
多谢各位的回答,程序已实现,但我想请问一下,申明时,加var和不加var有什么区别,有var相关的使用说明吗
展开
 我来答
己闻楣Sx
2010-11-10 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:912万
展开全部
先不看快速排序算法的正确与否,首先要明确固定数组和动态数组不是一种东西,其次是a被定义在const中,是否还允许改变而不出编译警告,也需要调整编译参数才能做到,还是先定义为动态数组变量,SetLength(a,6)确定长度,然后再麻烦地一一赋值后试试排序效果吧。

你这个快速排序的算法不知从哪里参考而来,像是从C语言等翻译过来的,其实,Classes.pas中就有一个TStringList.QuickSort,和你这个最大的区别在于只有一处递归调用,而且pascal风格更加明显,可供学习。
jyl_19
2010-11-11 · TA获得超过1002个赞
知道小有建树答主
回答量:708
采纳率:0%
帮助的人:1051万
展开全部
普通变量都是传值调用,对过程的赋值只在过程中起作用,出过程后的值不变;
变量前加var说明变量值在过程中可修改,修改后原来的值也改变,类似于C语言中的传址调用。
过程声明时变量 a 前面 加 var.
procedure quicksort(var a:array of integer;left,right:integer);
另a:=quicksort(a,0,5);错误,改为quicksort(a,0,5);

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 quicksort(var a:array of integer;left,right:integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
const a:array[0..5] of integer=(9,2,1,5,8,6);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
quicksort(a,0,5);
for i:=0 to 5 do begin
memo1.Lines.Add(inttostr(a[i]));
end;
end;

procedure TForm1.quicksort(var a:array of integer;left,right:integer);
var
i,j,povit :Integer;
begin
i := left;
j := right;
povit := a[i];
if(i<j) then begin
while(i<j) do begin
while((i<j) and (a[j]>=povit)) do
dec(j);
if(i<j) then begin
a[i]:=a[j];
inc(i);
end;
while((i<j) and (a[i]<=povit)) do
inc(i);
if(i<j) then begin
a[j]:=a[i];
dec(j);
end;
end;
a[i]:=povit;
quicksort(a,left,i-1);
quicksort(a,i+1,right);
end;
end;

end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bigfoot8
2010-11-11 · TA获得超过369个赞
知道答主
回答量:84
采纳率:0%
帮助的人:53.1万
展开全部
参见tstringlist.sort
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式