求pascal精簡的堆排序演算法程式

時間 2022-08-12 03:10:03

1樓:小葉子

孩子,用快排吧

這是最快的

程式1:

program kspv;

const n=7;

type

arr=array[1..n] of integer;

vara:arr;

i:integer;

procedure quicksort(var b:arr; s,t:integer);

var i,j,x,t1:integer;

begin

i:=s;j:=t;x:=b[i];

repeat

while (b[j]>=x) and (j>i) do j:=j-1;

if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;

while (b[i]<=x) and (i=x) and (j>i) do j:=j-1;

if j>i then begin b[i]:=b[j];i:=i+1;end;

while (b[i]<=x) and (ia[j+1]) then j:=j+1;

if t>a[j] then

begin a[i]:=a[j];i:=j;j:=2*i; end

else exit;

a[i]:=t;

end;

end;

begin

for i:=1 to n do read(a[i]);

for i:=(n div 2) downto 1 do

sift(a,i,n);

for i:=n downto 2 do

begin

write(a[1]:4);

a[1]:=a[i];

sift(a,1,i-1);

end;

writeln(a[1]:4);

end.

語重心長地告訴你:這不是我能實現的

2樓:匿名使用者

堆演算法因為數的大小不確定 操作次數不確定 應該是不能用for迴圈的

procedure 可以不用

但while一般還是要用的

3樓:匿名使用者

排1-n

program a1;

varn,i,t:integer;

a:array[1..1000]of integer;

begin

read(n);

for i:=1 to n do read(a[i]);

for i:=1 to n-1 do

for j:=i+1 to n do if a[j]>a[i] then begin

t:=a[i];a[i]:=a[j];a[j]:=t;

end;

for i :=1 to n do write(a[i],' ');

求pascal遞迴演算法教程,free pascal用遞迴的方法編寫函式求fibonacci級數

我也不會。我學c和c 的。抱歉 free pascal用遞迴的方法編寫函式求fibonacci級數 function fibonacci n integer int64 begin if n 0 or n 1 then fibonacci 1else fibonacci fibonacci n 1 ...

有關匹配和排序的演算法,高手幫幫忙哈

一 插入排序 insertion sort 1.基本思想 每次將一個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序 直到待排序資料元素全部插入完為止。2.排序過程 示例 初始關鍵字 49 38 65 97 76 13 27 49 j 2 38 38 49 65 97 76 ...

什麼是素數演算法,求素數的演算法

難得當歌對酒時 應當是素數判定演算法,也即判斷一個數是不是素數。常見的演算法有 1,暴力法,用2 sqrt n 之間的所有整數依次試除n,這種方法時間開銷很大。2,篩法。這種方法空間開銷很大。3,rabin miller演算法,這種方法在一定情況下會誤判。4,aks 演算法,多項式時間內判定 昔俊能...