第一范文网 - 专业文章范例文档资料分享平台

c算法大全常用c语言算法,包括数论算法,图论算法、排序算法、高精度计算、树的遍历算法等等

来源:用户分享 时间:2025/7/7 5:50:59 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

then begin

tmp[t]:=a[i]; inc(i);

end

else begin

tmp[t]:=a[j];inc(j);

end;

inc(t);

end;

for i:=p to r do a[i]:=tmp[i];

end;{merge}

procedure merge_sort(var a:listtype; p,r: integer); {合并排序a[p..r]}

var q:integer;

begin

if p<>r then begin

q:=(p+r-1) div 2;

merge_sort (a,p,q);

merge_sort (a,q+1,r);

merge (a,p,q,r);

end;

end;

{main}

begin

merge_sort(a,1,n);

end.

G.基数排序

思想:对每个元素按从低位到高位对每一位进行一次排序

五、高精度计算

高精度数的定义:

type

hp=array[1..maxlen] of integer;

1.高精度加法

procedure plus ( a,b:hp; var c:hp);

var i,len:integer;

begin

fillchar(c,sizeof(c),0);

if a[0]>b[0] then len:=a[0] else len:=b[0];

for i:=1 to len do begin

inc(c[i],a[i]+b[i]);

if c[i]>10 then begin dec(c[i],10); inc(c[i+1]); end; {进位}

end;

if c[len+1]>0 then inc(len);

c[0]:=len;

end;{plus}

2.高精度减法

procedure substract(a,b:hp;var c:hp);

var i,len:integer;

begin

fillchar(c,sizeof(c),0);

if a[0]>b[0] then len:=a[0] else len:=b[0];

for i:=1 to len do begin

inc(c[i],a[i]-b[i]);

if c[i]<0 then begin inc(c[i],10);dec(c[i+1]); end;

while (len>1) and (c[len]=0) do dec(len);

c[0]:=len;

end;

3.高精度乘以低精度

procedure multiply(a:hp;b:longint;var c:hp);

var i,len:integer;

begin

fillchar(c,sizeof(c),0);

len:=a[0];

for i:=1 to len do begin

inc(c[i],a[i]*b);

inc(c[i+1],(a[i]*b) div 10);

c[i]:=c[i] mod 10;

end;

inc(len);

while (c[len]>=10) do begin {处理最高位的进位}

c[len+1]:=c[len] div 10;

c[len]:=c[len] mod 10;

inc(len);

end;

while (len>1) and (c[len]=0) do dec(len); {若不需进位则调整len}

c[0]:=len;

end;{multiply}

4.高精度乘以高精度

procedure high_multiply(a,b:hp; var c:hp}

var i,j,len:integer;

begin

fillchar(c,sizeof(c),0);

for i:=1 to a[0] do

for j:=1 to b[0] do begin

inc(c[i+j-1],a[i]*b[j]);

inc(c[i+j],c[i+j-1] div 10);

c[i+j-1]:=c[i+j-1] mod 10;

end;

len:=a[0]+b[0]+1;

while (len>1) and (c[len]=0) do dec(len);

c[0]:=len;

end;

5.高精度除以低精度

procedure devide(a:hp;b:longint; var c:hp; var d:longint);

{c:=a div b; d:= a mod b}

var i,len:integer;

begin

fillchar(c,sizeof(c),0);

len:=a[0]; d:=0;

for i:=len downto 1 do begin

d:=d*10+a[i];

c[i]:=d div b;

d:=d mod b;

end;

while (len>1) and (c[len]=0) then dec(len);

c[0]:=len;

end;

6.高精度除以高精度

procedure high_devide(a,b:hp; var c,d:hp);

var

i,len:integer;

begin

fillchar(c,sizeof(c),0);

fillchar(d,sizeof(d),0);

len:=a[0];d[0]:=1;

for i:=len downto 1 do begin

multiply(d,10,d);

d[1]:=a[i];

while(compare(d,b)>=0) do {即d>=b}

c算法大全常用c语言算法,包括数论算法,图论算法、排序算法、高精度计算、树的遍历算法等等.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4ek4t6ny0j2r4yi9c1ze_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top