主题:[原创]常用算法(代码)--陆续增加中
			
 游侠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				
				真的好棒啊 
							 
									
			
我来回复