下是面参照别人代码写的快速排序写的过种;得不到正确结果,不知错在哪了,请帮忙;procedure TForm1.sort(a: array of integer; l, r: integer);
var i,j,mid,temp:integer;
begin
i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
repeat
while a[i]< mid do inc(i); {在左半部分寻找比中间数大的数}
while mid< a[j] do dec(j);{在右半部分寻找比中间数小的数}
if i<=j then
begin {若找到一组与排序目标不一致的数对则交换它们}
temp := a[i];
a[i] := a[j];
a[j] := temp;
inc(i);
dec(j); {继续找}
end;
until i >j;
if l< j then sort(a,l,j); {若未到两个数的边界,则递归搜索左右区间}
if i< r then sort(a,i,r);
end;{sort}
var i,j,mid,temp:integer;
begin
i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
repeat
while a[i]< mid do inc(i); {在左半部分寻找比中间数大的数}
while mid< a[j] do dec(j);{在右半部分寻找比中间数小的数}
if i<=j then
begin {若找到一组与排序目标不一致的数对则交换它们}
temp := a[i];
a[i] := a[j];
a[j] := temp;
inc(i);
dec(j); {继续找}
end;
until i >j;
if l< j then sort(a,l,j); {若未到两个数的边界,则递归搜索左右区间}
if i< r then sort(a,i,r);
end;{sort}
解决方案 »
- 用过reportmachine的请进,郁闷问题搞得头大了
- 紧急*delphi远程访问oracle存储过程错误
- 如果在TImage中的图片是Swf格式的,则不能用Image1.Canvas.Ellipse()之类函数画图形了,有什么解决方法吗?
- 在Delphi6.0中显示和保存ACCESS中的图片
- 请问怎样判断当前计算机有无安装光驱,软驱?
- 怎样控制输入呀??
- 如何使按钮的CAPTION竖排!
- 急急急!!!!!!!!!如何得到一个Application的Handle
- 查询条件的设置问题,
- 奇怪问题????????????
- 怎样用代码让adodataset增加一列?
- 关于拷屏的一段代码,请问到底是怎么错了?请指教。。
procedure swap(var a,b:integer); //交换
var tmp:integer;
begin
tmp:=a;
a:=b;
b:=tmp;
end;
function partition(var SortNum:array of integer;p,r:integer):integer; //划分
var i,j,x:integer;
begin
i:=p;j:=r+1;
x:=SortNum[p];
while true do
begin
repeat inc(i)
until SortNum[i]<x;
repeat inc(j,-1)
until SortNum[j]>x;
if i>=j then break;
swap(SortNum[i],SortNum[j]);
end;
SortNum[p]:=SortNum[j];
SortNum[j]:=x;
result:=j;
end;
var q:integer;
begin
if p<r then
begin
q:=partition(SortNum,p,r);
QuickSort(SortNum,p,q-1);
QuickSort(SortNum,q+1,r);
end;
end;
repeat inc(i)
until SortNum[i]=<x;
修改以后测试
}
program Project1;{$APPTYPE CONSOLE}uses
SysUtils;procedure QuickSort(var SortNum: array of integer; p, r: integer);
procedure swap(var a, b: integer); //交换
var
tmp: integer;
begin
tmp := a;
a := b;
b := tmp;
end;
function partition(var SortNum: array of integer; p, r: integer): integer;
var
i, j, x: integer;
begin
i := p;
j := r + 1;
x := SortNum[p];
while true do
begin
repeat inc(i)
until SortNum[i] <= x;
repeat inc(j, -1)
until SortNum[j] >= x;
if i >= j then
break;
swap(SortNum[i], SortNum[j]);
end;
SortNum[p] := SortNum[j];
SortNum[j] := x;
result := j;
end;
var
q: integer;
begin
if p < r then
begin
q := partition(SortNum, p, r);
QuickSort(SortNum, p, q - 1);
QuickSort(SortNum, q + 1, r);
end;
end;
var
SortNum: array of integer;
i: integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
//[4,3,7,8,1,2,9]
setlength(SortNum, 7);
SortNum[0] := 4;
SortNum[1] := 3;
SortNum[2] := 7;
SortNum[3] := 8;
SortNum[4] := 1;
SortNum[5] := 2;
SortNum[6] := 9;
QuickSort(SortNum, 0, 6);
writeln(format('[%d,%d,%d,%d,%d,%d,%d]', [SortNum[0], SortNum[1], SortNum[2],
SortNum[3], SortNum[4], SortNum[5], SortNum[6]]));
readln;end.