这是DELPHI里面带的快速排序的算法:
procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Mid, T: Integer;
begin
Lo := iLo; //最前面的序列
Hi := iHi; //最后面的序列
Mid := A[round((Lo + Hi) div 2)]; //中间的数值
repeat
//找到A[LO]=MID
while A[Lo] < Mid do Inc(Lo); //如果最前面的数值小于中间的数值,就增加最前面的序列
//找到A[HI]=MID
while A[Hi] > Mid do Dec(Hi); //如果最后面的数值大于中间的数值,就减少最后面的序列
if Lo <= Hi then //如果最前面的序列小于等于最后面的序列
begin
//交换两个数
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
//最前面的序列加一
Inc(Lo);
//最后面的序列减一
Dec(Hi);
end;
until Lo > Hi; //一直到最前面大于最后面 if Hi > iLo then QuickSort(A, iLo, Hi); //如果最后面的大于ILO ,则递归
if Lo < iHi then QuickSort(A, Lo, iHi); //如果最前面的小于IHI ,则递归
end;怎么改写成不要参数。直接就是对一个数组排序?谢谢。
procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Mid, T: Integer;
begin
Lo := iLo; //最前面的序列
Hi := iHi; //最后面的序列
Mid := A[round((Lo + Hi) div 2)]; //中间的数值
repeat
//找到A[LO]=MID
while A[Lo] < Mid do Inc(Lo); //如果最前面的数值小于中间的数值,就增加最前面的序列
//找到A[HI]=MID
while A[Hi] > Mid do Dec(Hi); //如果最后面的数值大于中间的数值,就减少最后面的序列
if Lo <= Hi then //如果最前面的序列小于等于最后面的序列
begin
//交换两个数
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
//最前面的序列加一
Inc(Lo);
//最后面的序列减一
Dec(Hi);
end;
until Lo > Hi; //一直到最前面大于最后面 if Hi > iLo then QuickSort(A, iLo, Hi); //如果最后面的大于ILO ,则递归
if Lo < iHi then QuickSort(A, Lo, iHi); //如果最前面的小于IHI ,则递归
end;怎么改写成不要参数。直接就是对一个数组排序?谢谢。
解决方案 »
- delphi对IC卡编程初次者请教
- 关于字符串处理的问题
- 请教-----------------如何把这个多线程攺成公共函数?---------------------------------
- 怎么得到字符串算式的值?
- 用query查询得到数据,如何让query中的数据指针和原表中的一致呢?
- 请问怎么去掉窗体左上角的小图标,但要保留最小化按钮,关闭按钮等
- 关于listview的删除问题
- 下面的问题是DELPHI的问题还是ODBC的问题,请各位关注
- 200分,要有水平的哦,如何生成一个三类传真机可以接收的*.tif文件
- 我用wingate做代理服务器工作站该怎么设?
- 用adoquery怎么视线插入功能?
- 如何使用数据模块啊~~~!新手,在线等待
procedure QuickSortA(var A: array of Integer);
begin
QuickSort(A,1,length(A));
end;
谢谢你的回答,我上面的程序里面有个
REPEAT
UNTIL
在哪里EXIT呢?
UNTIL
循环完它就退出来了。
var
Lo, Hi, Mid, T: Integer;
begin
Lo := 1;
Hi := heigh(a);
Mid := A[round((Lo + Hi) div 2)];
repeat
while A[Lo] < Mid do Inc(Lo);
while A[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
end;
这个算法本身有没有问题啊,我执行以后,结果好象还是没有排序啊?
真的很着急,高手帮帮忙。谢谢。