上次的选择排序,无论数组是如何排列的其算法的比较次数都是n(n-1)/2。
插入排序的方法是 从数组A[0]开始(先将数组中的首元素视为一个已经排序好的数组,因为是一个元素的数组,他自然是已经排序好的..)将A[1]插入到A[0]的前面或者后面,这取决于A[0]是否比A[1]大,接着继续这一过程 每次都是将A[i]插入到已经排序好的A[0....i-1]中合适的位置。
比较的过程为 依次扫描A[0....i-1],每次都将A[i]于当前位置的元素比较,如果当前位置的元素比A[i]大,那么就将当前元素的位置移动到一个更高序号的位置,如果当A[i]大于当前位置的元素或者全部扫描完毕 比较过程结束,将A[i]插入到合适的位置。
看下代码吧…
Continue reading ‘[算法学习]插入排序’
正好再经典看到这个帖子http://bbs.blueidea.com/thread-2671861-1-1.html
写成一个小函数,方便以后使用
不过没有实现可以输出 1.00 的样子 一方面没有想出来怎么写法,还有就是我在as里trace(1.00) 输出是 1
下面是代码
[as]
function decimal(num:Number, dec:Number):Number
{
if(!dec || dec<0) return num;
var digit:Number = Math.pow(10, dec);
if(digit == Infinity) return num;
return Math.round(num * digit)/digit;
}
trace(Math.PI)
trace(decimal(Math.PI, 2));
trace(decimal(Math.PI, 5));
trace(decimal(Math.PI, 1000)) // Infinity
trace(decimal(Math.PI, -5)); // <0
/*
out put:
3.14159265358979
3.14
3.14159
3.14159265358979
3.14159265358979
*/
[/as]
这次的算法是将两个各自按升序排列的数组a和b合并成一个数组m,并且将m也按升序排列
其基本原理是 先定义2个计数器 ai=0, bi=0 然后比较a[ai]和b[bi]如果a[ai]<=b[bi]那么就将a[ai]添加到数组m,计数器ai加1,否则将b[bi]添加到数组m
当计数器ai或bi达到对应数组的长度值时循环结束,接着将另一个数组中剩下的元素添加到数组m中
下面看下as代码吧… 请多指教啊,呵呵
Continue reading ‘[算法学习]合并两个有序列表’
学编程也有段时间了,但是一直没有好好的去学习算法,只是一直追求语和法编程语言的功能等,现在感觉到,编程语言只是工具算法和思想才是核心。
最近在china-pub买了本算法的书,这次要好好学学了:mrgreen:

算法设计技巧与分析
现在说一下这本书介绍的第一个算法 二分搜索
Continue reading ‘[算法学习] 二分搜索’
装了这个插件后,查看网页源代码会非常清晰,不错的插件,FireFox is cool!:mrgreen:
安装