本文实例讲述了JavaScript实现的选择排序算法。分享给大家供大家参考,具体如下: 简单选择排序是人们最熟悉的比较方式,其算法思想为:从数组的开头开始,将第一个元素和其他元素进行比较。检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续。这个过程会一直进行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序。 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
最近人工智能课老师布置了一个八数码实验,网上看到很多八数码的启发式A*算法,但是大多数都是利用C或者C++在控制台实现的,于是我用js在网页中做了一个类似的。 首先八数码就是一个九宫格,其中有一个空格,其他八个对应数字1-8,移动空格,使得最后状态为有序,如下图启发式算法是指在求解时,利用启发函数将不符合规则的解节点去掉,从而缩小问题的解空间。 A*算法是利用评价函数的启发式算法,在本例中,利用当前节点状态与最终...
本文实例讲述了基于JavaScript实现的希尔排序算法。分享给大家供大家参考,具体如下: 通过对直接插入排序的分析,可知其时间复杂度为O(n2),但是,如果待排序序列为正序时,其时间复杂度可提高至O(n)。希尔排序正是对此进行改进的排序。希尔排序的核心理念与插入排序不同,它会首先比较距离较远的元素,而非相邻元素。通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔。 下图演示了希尔排序中间隔序列是...
本文实例讲述了JavaScript数据结构之二叉树的遍历算法。分享给大家供大家参考,具体如下: 三种遍历的代码: function inOrder(node){//中序遍历if(node!=null){inOrder(node.left);document.write(node.show()+" ");inOrder(node.right);} } function preOrder(node){//先序遍历if(node!=null){document.write(node.show()+" ");preOrder(node.left);preOrder(node.right);} } function postOrder(node){//后序遍历if(node!=null)...
本文实例讲述了JavaScript数据结构之二叉树的查找算法。分享给大家供大家参考,具体如下: 前面文章介绍了二叉树的遍历,现在谈谈在二叉树中进行查找。对二叉查找树来说,一般有以下三类查找:最大值,最小值和给定值。 查找最小值就是遍历左子树,直到找到最后一个结点,这是因为在二叉查找树中较小的值总是在左子节点上的。 代码如下: function getMin(){//查找最小值var current=this.root;//指向根节点while(current.left!=nu...
本文实例讲述了JavaScript数据结构之二叉树的删除算法。分享给大家供大家参考,具体如下: 从二叉查找树上删除节点的操作复杂程度取决于删除哪个节点。如果删除没有子节点的节点就非常简单,如果节点只有一个子节点,不管是左子节点还是右子节点,就变得稍微有点复杂,如果节点包含两个子节点就最复杂。 如果待删除节点是叶子节点,那么只需要将从父节点指向它的链接指向null。 如果待删除节点只包含一个子节点,那么原本指向它的节...
本文实例讲述了JavaScript数据结构之二叉树的计数算法。分享给大家供大家参考,具体如下: 二叉查找树的一个用途就是记录一组数据集中数据出现的次数。比如记录成绩的分布,给定一组考试成绩,如果未出现则加入树,如果已经出现则数量加一。 所以要修改Node对象,添加记录成绩出现次数加一,代码如下: function Node(data,left,right){this.data=data;this.left=left;this.right=right;this.show=show;this.count=1;//记录出现的次...
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了。月份开始和结束日期如果在同一个月,则结束日期月份就不用写了。 另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期...
本文实例讲述了JS实现的二叉树算法。分享给大家供大家参考,具体如下: <!DOCTYPE HTML> <head><title>20130328BinaryTree</title><metahttp-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <html> <body> <script>//今天学习了下二叉树算法,总结在这里//1全局变量 binary Tree =bt//1.1 nodefunction Node() { //bt节点this.text = ; //节点的文本this.leftChild = null; //节点的左孩子引...
我们去面试一般都有笔试,笔试题一般都会涉及到很多算法的东西。 不管你用的多不多,反正就是要会。不然笔试很难过。 就算是直接面试的,有时候也会遇到面试官直接叫你当场写个算法题出来这种情况。 因为笔试时间很有限,不会出很复杂的题目,所以笔试怎么出都不会离开下面这几种题。 废话不多说,下面来列出主要的几个算法题。 1.排序 一般都是给个数组然后排序,有的从小到大,有的从大到小。一定要看清楚。以下都是从小到大的排...
html中颜色可以使用rgb和hex方式来表示。 在色彩中,色相、明度、纯度也都可以产生渐变效果,并会表现出具有丰富层次的美感。本文主要讲述两种颜色RGB数值的梯级渐变算法。 其中如如16进制颜色如#336600分别表示rgb模式中r的值为16进制33(即),g的值为16进制的66,和b为16进制的00,转换后用rgb完整表述为:rgb(51,102,0)。 其中使用16进制进行加减乘除不方便,尤其还使用了rgb的16进制颜色组合(#336600)。因此我们可以将16进制...
算法是程序的灵魂,一个优秀前端工程师对算法也是要有所了解的,本文总结了我们在开发、面试中经常会遇到的基础算法,使用原生JS实现,未必是最优解,可以互相探讨。 为了便于查看,简单分下类,本文也会持续更新。 排序算法 1. 冒泡排序 function bubbleSort(arr){var i = j = 0;for(i=1;i<arr.length;i++){for(j=0;j<=arr.length-i;j++){var temp = 0;if(arr[j]>arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}...
1. 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 2. 动图演示3. 什么时候最快 当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊)。 4. 什么时候最慢 当输入...
循环处理是最常见的编程模式之一,也是提升性能必须关注的要点之一。 常见的优化方案有: ①JavaScript的四种循环(for、do-while、while、for-in)中,for-in循环比其他几种明显要慢。由于每次迭代操作会同时搜索实例或原型属性,for-in循环的每次迭代都会产生更多的开销,所以比其他类型要慢。因此遍历一个属性数量有限的已知属性列表,可以这样优化: var props = [prop1, prop2],i = 0; whlie(i < props.length){precess(object[...
最近有用到日历可需要编辑文本的日历,为了绑定数据的方便,所以用js写了一套日历,其实思想也是很简单。 实现步骤如下: 1、首先取得处理月的总天数 JS不提供此参数,我们需要计算。考虑到闰年问题会影响二月份的天数,我们先编写一个判断闰年的自编函数: function is_leap(year) {return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0)); } 2、接着定义一个包含十二个月在内的月份总天数的数组: m_days=new Array(31...