简单算法集锦

1,  1000的阶乘

这个算法主要有两个地方要注意, 一个就是大数的问题, 还有一个就是位数的问题,

只要这两个问题解决了,这个算法也就没有什么问题了,

①首先还是来说一下位数的问题, 有一个比较简单的办法,就是有一个人已经做了一个公式来

做位数的问题了: lnN!=NlnN-N+0.5ln(2N*pi), log10(N!)取整后加1就是1000!的位数,这里log10(N!)=lnN!/ln(10),

是不是很简单,看来数学这个东西还真是要学好不可啊,

Code

②大数的问题, 因为在阶乘运算中,常常用一个long int型是不能够的,这样就要找其它的办法,要在存储数字,这样的话就只有数组了,

用数组里a[0]--个位,a[1]--十位,a[2]--百位.......这样不就可以表达所有的数了吗?

最后 1000阶乘源码

源文件:/Files/ouzi/WinForm/Factorial1000.rar

 

2, 快速排序法

快速排序法可以说是运用递归的最经典的例子,哦,这个话好象不对, 最经典的应该是这个Fibonacci了

Code

我以前好象说过,我在项目中用的快速排序也不多,主要用的是插入排序法,因为插入排序法的代码相对少一些,也比较直观,

现在闲来无事,也就将这个做一下,快速排序法的主要思想就是不停的填位,再不停的分割,填位就是为了让基数左边的所有数都

小于基数,右边的数都大于基数(这个是按由小到大来说的).

Code

 

3,分页的存储过程

这个应该不能算是算法,但好象也不能不算,不管那么多了,就这样的吧,放到这里,这个存储过程中也有一些技巧的东西。

Code

这个里面的sp_executesql的用法要注意,可以在存储过程中返回值,这样在分页中就不用返回两个表了,

DECLARE @sqlString NVARCHAR(500)
DECLARE @totalCount INT

SET @sqlString='SELECT @totalCount=COUNT(*) FROM Blog'
EXEC sp_executesql @sqlString,N'@totalCount INT OUTPUT',@totalCount OUT

PRINT @totalCount

 

 4,两张表列的拼接

也就是没有关系的两张表的列拼接

Code

 

     

 


----------------------------------------------------------------------------------------------------------------

算法之路永无止境---ouzi--just love it 

posted @ 2009-02-15 20:07  connoryan  阅读(518)  评论(0编辑  收藏  举报