主题:[原创]常用算法(代码)--陆续增加中
游侠UFO
[专家分:1200] 发布于 2005-12-25 10:12:00
这些几乎都是我平时根据一些书上的算法描述写出来的.
如果有错误的地方,请大家及时提出,以便我及时更改,谢谢!
冒泡排序:
for i:=1 to (n-1) do
for j:=n downto (i+1) do
if a[j]<a[j-1] then //这是从大到小排列,如果是从小到大排列,则应是a[j]>a[j-1]
begin
k:=a[j-1];
a[j-1]:=a[j];
a[j]:=k;
end;
回复列表 (共40个回复)
11 楼
游侠UFO [专家分:1200] 发布于 2005-10-22 10:26:00
拓普排序:
<type>
stucktype=record
data:array[1..255] of byte;
top:byte;
end;
<main>
procedure topsort(g:graphtype{矩阵}; var s:stucktype);
var
b:boolean;
i,y:integer;
begin
b:=false;
for i:=1 to n do
if (tryindegree(g,i){计算节点入度}=0) and (not (i in delnode{记录被删除的节点})) then
begin
push(s,i);
b:=true;
end;
while s.top>0 do
begin
y:=pop(s);
write(y,' ');
for i:=1 to n do g[y,i]:=0;
delnode:=delnode+[y];
end;
if b then topsort(g,s);
end;
12 楼
FancyMouse [专家分:13680] 发布于 2005-10-22 11:00:00
还有:
排序 快速排序、堆排序(优点是最坏情况依然是O(nlogn))
数学 高精度数加减乘法
查找 二分查找,Hash表
图论 Kruskal、Dijkstra
可惜我是用C/C++的,pascal写不来诶~楼主就来补充吧~.~
13 楼
游侠UFO [专家分:1200] 发布于 2005-10-22 11:17:00
这个是会陆续补充的,不过我是高二学生,时间不是特别多,可能会帖得比较慢.
14 楼
阿Ben [专家分:2200] 发布于 2005-10-22 12:12:00
好!楼主厉害!楼主加油!
我还想要动态规划!谢谢!
15 楼
游侠UFO [专家分:1200] 发布于 2005-10-22 13:01:00
动态规划不能用固定的代码描述出来!
这和贪心法一样,要因题而异,具体的策略只能依据你平时做题的经验而定!
16 楼
游侠UFO [专家分:1200] 发布于 2005-10-22 14:53:00
筛法求素数:
<init>
a[1]:=0;
for i:=2 to n do a[i]:=i;
i:=2;
<main>
while i<=n do
begin
k:=i;
while k<=n do {将所有a[i]的倍数清0}
begin
k:=k+i;
a[k]:=0;
end;
i:=i+1;
while (a[i]=0) and (i<n) do i:=i+1; {查找接下来的第一个非0数}
end;
{数组a中不为0的数就是素数}
17 楼
FancyMouse [专家分:13680] 发布于 2005-10-22 19:56:00
动态规划只有一个比较通用的代码框架,实际上动规的使用是非常灵活的
18 楼
游侠UFO [专家分:1200] 发布于 2005-10-22 20:22:00
今天得知我进入复赛了,高兴啊!!!
希望我帖的这些东西能给大家参加复赛带来一些帮助!
19 楼
游侠UFO [专家分:1200] 发布于 2005-10-24 17:31:00
二分查找:
function search(a:arraytype; x{目标},head,tail:integer):integer;
var
ans,mid:integer;
begin
ans:=0;
while head<=tail do
begin
mid:=(head+tail) div 2;
if x=a[mid] then
begin
ans:=mid;
break;
end
else
begin
if x<a[mid] then tail:=mid-1;
if x>a[mid] then head:=mid+1;
end;
end;
search:=ans;
end;
20 楼
天空飞雪 [专家分:960] 发布于 2005-10-25 21:09:00
真的好棒啊
我来回复