delphi 编写排序程序

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:05:29
1.编写排序程序:
(1) 生成n个[0,65535]以内的整数随机数,存入文本文件;
(2) 将n个随机数从小到大排序,并显示结果。排序要求采用 ‘气泡法’ 和 ‘k桶法’,并比较两种方法随n增加各自所用的运行时间 (n至少取值 2000, 4000, 6000,10000)。(提示:用GetTime获取运行时间,k桶法尽量不用动态指针,但可用指针数组;随机数的产生见第2题)
气泡法:将第1个数与第2个数比较,若逆顺序则交换它们的位置;然后第2个与第3个数比较,以此类推,...,直到第n1个数与第n个数比较,完成第一轮的比较。显然,第一轮比较后,最大的数 ‘浮’到了最后一位。然后进行第二轮比较,以此类推,直到没有交换发生。注意编程要用最小的计算量。
k桶法:k桶法有两个主要步骤:分桶,整合。
分桶:把n个数依次放入k个桶中,除了第k个桶外,放入前k1个桶中的数都要求后一个大于前一个。分桶的具体规则如下:
第1个数放入第一个桶内,第2个数若大于第一个桶中的数(即第一个数)则放入第一个桶内,否则放入第二桶内,以此类推。设现要将第j个数放入某桶中,先从第一个桶试起,若第j个数大于当前第一个桶中最后一个数,则放入第一个桶中,否则试放第二个桶,以此类推,若前k1个桶都不能放入,则直接放入第k个桶。
整合:把k个桶中当前排在最前面的数中最小者依次放回到原数组中,直到k个桶空为止。
若整合后的数组已排好序,则算法停止,否则重新分桶、整合,直到排好序为止。
对于k桶法要求可以改变k的值,并通过试验观察k的影响。

达人指教!谢谢

气泡法
var
i,j,k,temp:integer;
begin
for i:=1 to 总个数 do
begin
for j:=i+1 to 总个数 do
begin
if aa[j]>aa[j+1] then
begin
temp:=aa[j];
aa[j]:=aa[j+1];
aa[j+1]:=temp;
end;
end;
end;

k桶法,再想想