1、如何交换两个变量的值?

我们定义了三个变量,分别是变量A,变量B,变量T(临时变量,用来作中间过渡的)。

现在我们的需求是,要将变量A和变量B的值进行交换。

在JS中,定义变量是用var。下面我们来定义三个变量,其中,将变量A和B,进行初始化赋值。

var A = 3;

var B = 6;

var T;

这里我们引入了一个临时变量T,用来中间过渡。

交换的流程如下图所示,

第一步,先把变量A的值存储在临时变量T;

第二步,将变量B的值赋值给变量A;

第三步,将变量T的值,赋值给变量B;至此,交换完成。

我们可以的把三个变量想象成三个房间,分别命名为A、B、T的三个房间。

我们先把A房间的东西腾出来到房间T,再把房间B的东西放到房间A,最后把房间T的东西放到房间T里面,完成了交换。

用代码来表示,即为:

var T = A;

var A = B;

var B = A;

完整的代码显示如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7     var a = 3;
 8     var b = 6;
 9     var t;
10     t = a;
11     a = b;
12     b = t;
13     console.log(a);
14     console.log(b);
15     </script>
16 </head>
17 <body>
18 </body>
19 </html>

View Code

2、求1到100的和;

分别用for和while循环实现1到100的和;

for循环:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         var sum = 0; //定义一个变量用来求和,并初始化为0;
 8         for (var j = 0; j < 101; j++){
 9             sum += j;
10         }
11         console.log(sum);
12     </script>
13 </head>
14 <body>
15 </body>
16 </html>

View Code

while循环:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         var sum = 0; //定义一个变量用来求和,并初始化为0;
 8         var i = 0; //定义一个变量并初始化,用来while循环的条件;
 9         while (i < 101) {
10             sum += i;
11             i++;
12         }
13         console.log(sum);
14     </script>
15 </head>
16 <body>
17 </body>
18 </html>

View Code

注意:这里我们写了一句:sum += i和sum += j;其实这两句话的作用就是用来累加求和的,但是我们是可以把它们给拆分开来的;

sum += i ===> sum = sum + i;

sum += j ===> sum = sum + j;

3、打印99乘法表;

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         for (var i = 1; i <= 9; i++){
 8             str = ""; //定义一个字符串,并初始化为空字符串,用于字符串的累加。外循环每执行一次,字符串str的内容都会被清空一次。
 9             for (var j = 1; j <= i; j++){
10                 str +=j + "×" + i + "=" + (i*j) + "\t";
11             }
12             console.log(str+"\n");
13         }
14     </script>
15 </head>
16 <body>
17 </body>
18 </html>

View Code

注意:这里通过字符串拼接的形式,将内循环的结果信息,按照"\t"制作符隔开,输出在同一行。

外循环,通过"\n"实现换行。

显示效果:

下面,我们将对99乘法表进行改造,采用html和js结合的模式,为99乘法表换上漂亮的皮肤。

table>tr>th(td)

<tr></tr>定义一行标签;

<td></td>定义行中的一个列,需要嵌套在<tr></tr>中间;

<th></th>定义表头单元格,表格中的文字将以粗体显示;需要嵌套在<tr></tr>中间;

代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <style type="text/css">
 7     table{ 8         width: 800px;
 9         height: 300px;
10         border-collapse: collapse;
11     }
12     table th{13         border: 1px solid #069;
14     }
15     body{16         text-align: center;
17     }
18     h1{19         font-family: "微软雅黑", Verdana, sans-serif, "宋体";
20         color: #666;
21         font-weight: bold;
22         margin-bottom: 30px;
23     }
24     </style>
25 </head>
26 <body>
27     <script type="text/javascript">
28         document.write("<table>");
29         var str = "js九九乘法表";
30         document.write("<h1>" + str + "</h1>");
31         for (var x = 1; x <= 9; x++){
32             document.write("<tr>");
33             for (var y = 1; y <= x; y++){
34                 document.write("<th>" + x + "×" + y + "=" + (x * y) + "</th>");
35             }
36             document.write("</tr>");
37
38         }
39         document.write("</table>");
40     </script>
41 </body>
42 </html>

View Code

效果如下:

4、用JavaScript来写冒泡算法;

首先,我们来看一下百度百科对于冒泡算法的解释:

“冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。”----来自百度百科

下面,我们来看一看用JS来实现冒泡排序的代码吧:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         function bubbleSort(arr){
 8             var i = arr.length;
 9             var j;
10             var tempExchangVal;
11             while(i > 0){
12                 for (j = 0; j < i - 1; j++){
13                     if (arr[j] > arr[j + 1]){
14                         tempExchangVal = arr[j];
15                         arr[j] = arr[j + 1];
16                         arr[j + 1] = tempExchangVal;
17                     }
18                 }
19                 i--;
20             }
21             return arr;
22         }
23         var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
24         var arrSorted = bubbleSort(arr);
25         console.log(arrSorted);
26         alert(arrSorted);
27     </script>
28 </head>
29 <body>
30 </body>
31 </html>

View Code

下面,我们来分析一下以上的代码:

在这一段代码中,我们用了两个循环,一个是whlie引导的,一个是for引导的。

内循环for语句里面用了一个if条件判断且为true的主体内容是用来交换元素的位置;

内循环for语句在这里主要是根据数组的下标,来控制交换的循环次数。

外循环while在这里面的主要作用是来控制for循环被执行的次数;

下面我们来一句一句的对代码进行细节解析:

第一段:

var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; //定义一个数组,并赋值给变量arr;

var arrSorted = bubbleSort(arr); //我们定义了一个函数方法名为bubbleSort,并带参数arr,将结果返回给变量arrSorted;
console.log(arrSorted); //在控制台打印变量arrSorted值的日志信息;
alert(arrSorted);//弹出变量arrSorted的值;

第二段(为方便解释,格式先不调了,可以参考上面的正确的格式排版):

function bubbleSort(arr){ //自定义一个函数方法,命名为bubbleSort,并传参数arr;
var i = arr.length; //计算出数组的长度值,并赋值给变量i;数组的引用.length代表数组的长度;
var j; //定义一个变量j,暂不初始化;
var tempExchangVal; //定义一个临时变量tempExchangVal,暂不初始化;
while(i > 0){ //while引导的外循环,在这里是控制主体函数的执行的次数;
for (j = 0; j < i - 1; j++){ //for引导的内循环,在这里是控制if引导的条件主体语句的循环的次数;
if (arr[j] > arr[j + 1]){ //根据数组中元素的索引位置的对应的数的进行大小的比较;当前一个数大于后一个数的时候,条件为true时执行;
tempExchangVal = arr[j]; //将变量arr[i]赋值给临时变量tempExchangVal;
arr[j] = arr[j + 1]; //将变量arr[j+1]赋值给arr[j];
arr[j + 1] = tempExchangVal; //最后将临时变量tempExchangVal赋值给arr[j + 1];
}
}
i--; //while的循环条件变量i递减
}
return arr; //将最终的结果返回;
}

下面,我们将这一段代码用for....for...嵌套循环来表示:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         function bubbleSort(arr){
 8             for (var i = 0; i < arr.length-1; i++){
 9                 for (var j = 0; j < arr.length-1-i; j++){
10                     if (arr[j] > arr[j+1]){
11                         var temp = arr[j];
12                         arr[j] = arr[j+1];
13                         arr[j+1] = temp;
14                     }
15                 }
16             }
17             return arr;
18         }
19         var arr = [8, 3, 2, 4, 9, 1, 5, 7, 6];
20         var arrSorted = bubbleSort(arr);
21         console.log(arr);
22     </script>
23 </head>
24 <body>
25 </body>
26 </html>

View Code

这里我们主要分析两点小细节;

①第一处就是内循环for的循环条件:j < arr.length-1-i;

这里一般人在写的时候,其实很少会带上-i,当然并不影响代码的正确性,但是加上以后却能提升代码的执行效率;

因为每一次的内循环,都会把最大的一个数,调到了最后;所以没必要还每一次去比较交换最后面已经确定了位置的数了,这样会影响效率,这也就是-i的妙处;

②第二处,就是return arr摆放的位置;

当程序执行完成以后,我们需要把结果返回回来;但是这里一定要注意一点啊,千万不要把return放在for循环里面了,因为return有跳出循环的作用,写在里面了,就得不到我们想要的结果了。

5、求1到100内的质数;

首先,我们需要了解一下什么是质数?

下面,我们来看一下来自百度百科的定义:“质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Sank my battleShip</title>
 6     <script type="text/javascript">
 7         for (var i = 1; i <=100; i++){
 8             //设置变量标签flag,其默认值为true,用来表示其为质数;
 9             var flag = true;
10             if (i == 1){ //1不是质数;质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
11                 flag = false;  //设置变量标签值为false,表示其不为质数;
12             }
13             for (var j = 2; j <= Math.sqrt(i); j++){//假设一个数为n,只要小于或等于根号n的数(1除外)不能整除n,则n一定是素数,反之则是合数。
14                 if (i % j ==0){ //如果能被整除;
15                     flag = false; //则不是质数;
16                 }
17             }
18             if (flag){ //如果flag为true;
19                 console.log(i); //则是质数。
20             }
21
22         }
23     </script>
24 </head>
25 <body>
26 </body>
27 </html>

View Code

注意点:for (var j = 2; j <= Math.sqrt(i); j++)

Math.sqrt(i)表示一个数的平方根。

假设一个数为n,只要小于或等于根号n的数(1除外)不能整除n,则n一定是素数,反之则是合数。

当然,也可以粗略的考虑,不考虑那么复杂,也可以将上面那一句代码修正一下;不过就是可能执行的效率会低一点。

for (var j = 2; j < i; j++)

最后执行的结果是一样的,并不建议采用这种处理的方式。

  

  

转载于:https://www.cnblogs.com/niuwa/p/7661747.html

JavaScript基础算法相关推荐

  1. JavaScript基础算法——Roman Numeral Converter(阿拉伯数转换罗马数字)

    要求: 将给定的数字转换成罗马数字. 所有返回的 罗马数字 都应该是大写形式. 样本: convert(2) 应该返回 "II". convert(3) 应该返回 "II ...

  2. JavaScript基础算法:中奖奖池设定概率

    let buffer = ['一等奖','二等奖','三等奖','四等奖','五等奖']; // 奖池let buff_probability = [0.1, 0.3, 0.5, 0.7, 0.9]; ...

  3. JavaScript基础算法——摧毁数组

    要求: 实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值. 样本: destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1 ...

  4. JavaScript常用基础算法

    为什么80%的码农都做不了架构师?>>>    基础算法 一.排序 冒泡排序 //冒泡排序 function bubbleSort(arr) {for(var i = 1, len ...

  5. JavaScript学习---JavaScript基础知识

    JavaScript的引入方式 JavaScript的引入方式: 1.直接在script里面写: 2.使用<script src="JS的文件位置"> {#1 直接编写 ...

  6. javascript基础修炼(11)——DOM-DIFF的实现

    参考代码将上传至我的github仓库,欢迎互粉:https://github.com/dashnowords/blogs/tree/master 一. 再谈从Virtual-Dom生成真实DOM 在上 ...

  7. javascript基础修炼(10)——VirtualDOM和基本DFS

    本篇只是部分原理的学习笔记,并不代表框架真实源码的实现逻辑. 1. Virtual-DOM是什么 Virtual-DOM,即虚拟DOM树.浏览器在解析文件时,会将html文档转换为document对象 ...

  8. Javascript基础知识之四(常用数组方法)

    一.MDN链接 Array - JavaScript | MDNJavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象.https://developer.moz ...

  9. 【Javascript 基础】课堂笔记1

    计算机编程基础 计算机语言,总的来说分为三类:机器语言.汇编语言.高级语言. 标记语言(HTML)被读取的,编程语言有逻辑&行为能力. JavaScript&基础使用 JS 是运行在客 ...

最新文章

  1. 震惊 Guava 竟然有坑
  2. bzoj3589 动态树
  3. php 代码线程,php实现多线程代码
  4. A02_Python(基本数据类型,容器,函数,类),Numpy(数组array,数组索引,数据类型,数组中的数学,广播)
  5. 在android中监听呼出电话(电话拦截、修改呼出电话)
  6. mysql-workbench中用select in对变量赋值
  7. JAX-RS 2.0:服务器端处理管道
  8. 先思再行 闭着眼睛编程
  9. php获取页面中的指定内容,php 获取页面中指定内容的实现类
  10. Elasticsearch安装及自动同步mysql数据库数据
  11. fadein和fadeto_jQuery fadeIn,fadeOut,fadeTo
  12. [转]优化MySQL数据库性能的八大“妙手”
  13. 国内视频监控芯片方案分析
  14. AD参数微分非线性(DNL)与积分非线性(INL)
  15. 基于天牛须搜索算法的函数寻优算法
  16. Ubuntu22.04 安装禅道
  17. 解决word插入的图片不能正常显示
  18. [openwrt]coredump设置
  19. 遗传算法(四)——遗传算法的基本实现技术
  20. 163邮箱哪个安全好用?常用的电子邮箱品牌有哪些?

热门文章

  1. 经典Hadoop书籍介绍
  2. 论文阅读_DEVFormer
  3. Java服务超时保护_五、服务保护-Hystrix
  4. MixMatch、UDA、ReMixMatch、FixMatch
  5. 3万字英国留学生Java后台面经,中offer率5/7 精
  6. 学计算机用windows还是macos,电脑买Win还是买Mac?选择Macbook的六大理由
  7. LindDotNetCore~基于模块化注入的介绍
  8. 企业级项目|用Python进行web开发企业统一用户认证和权限控制平台
  9. 推荐几款常用的企业网盘软件,你喜欢哪一款?
  10. GBU810-ASEMI整流桥GBU810