1.       排序问题

a)      选择排序

//选择排序,第一个和逐一和后面每个数比较,比较后交换使得第一个数成为较大/小值后,第一个数后面所有数比较完了就得到了最大/小值(第一趟比较完毕),然后第二个和后面每个数比较得到 第二大/小值。。。

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length-1;i++){

for(var j=i+1;j<a.length;j++){

if(a[i]>a[j]){

var temp ;

temp = a[i] ;

a[i]  = a[j];

a[j]=temp;

}

}

}

a;

b)      冒泡排序

//冒泡排序,第一个和第二数个比较大小,根据比较情况选择是否冒泡(交换位置),

第二个数和第三个数比较,根据比较情况选择是否冒泡(交换位置)。。。第一趟比较完毕,最大/小值已放到最最后一位,然后第二趟

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length;i++){//控制循环趟数

for(varj=0;j<a.length-1;j++){//每趟进行冒泡比较

if(a[j]>a[j+1]){

var temp ;

temp = a[j] ;

a[j]  = a[j+1];

a[j+1]=temp;

}

}

}

a;

上面代码虽然可以实现冒泡排序的效果,但是不够优化

如果冒泡排序10个数,只需要循环9趟即可,因为循环第10趟是排序已经排好。再就是外循环跑一趟,实际上已经把最大/小值冒泡到最后位置,所以内循环进行冒泡排序不在需要和已经冒泡好的数据进行比较。

故此,优化后的代码是:

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length-1;i++){//控制循环趟数,排序数字个数减一

//每趟进行冒泡比较,已经冒泡的数字不在循环比较

for(varj=0;j<a.length-1-i;j++){

if(a[j]>a[j+1]){

var temp ;

temp = a[j] ;

a[j]  = a[j+1];

a[j+1]=temp;

}

}

}

a;

1.       汉诺塔问题

这是典型的函数递归调用问题

1)  当A塔上只有1个圆盘,可直接从A—>C。

2)  当A塔上有2个圆盘, A—>B(小圆盘),A—>C(大圆盘),B—>C(小圆盘)。

当有2个圆盘时,需要借助B柱子进行转换。

3)  当我们有很多圆盘时,我们可以看做2个圆盘,最下面的大圆盘 和其上面的所有圆盘当做小圆盘。这样我们就可以用函数递归调用了。

比如A柱上有10个圆盘,我们需要把A柱10号大圆盘 上所有圆盘移动 B柱,这样10号大圆盘盘就可以移动到C柱。我们想要把10号圆盘上的所有圆盘移动到B柱,我们就需要把9号圆盘上所有圆盘移动到A柱,这样9号圆盘就可以移动到B柱。感觉有点说不清,画个图:

/**

*@param num 盘子数

*@param A 当前柱子

*@param B 中间柱子

*@param C 目标柱子

*/

function  hanLuo(num,A,B,C){

if(num==1){

console.log(A+'-->'+C);//只有一个盘子A-->C

}else{

hanLuo(num-1,A,C,B);//将num-1个盘子从A-->B

console.log(A+'-->'+C);   //将最下面的盘子(num)盘子,从A柱子移动到C柱子

hanLuo(num-1,B,A,C)//将num-1个盘子从B-->C

}

}

hanLuo(2,'A','B','C');

function  hanLuo(num,A,B,C){

if(num==1){

returnA+'-->'+C+',';//只有一个盘子A-->C

}else{

var str1 =hanLuo(num-1,A,C,B);//将num-1个盘子从A-->B

var str3 =A+'-->'+C+','; //将最下面的盘子(num)盘子,从A柱子移动到C柱子

var str2 =hanLuo(num-1,B,A,C)//将num-1个盘子从B-->C

return str1+str3+str2;

}

}

hanLuo(2,'A','B','C');

经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现相关推荐

  1. 汉诺塔问题java编程,Java经典编程300例之实例047 汉诺塔问题求解(递归)

    实例说明 汉诺塔问题的描述如下:有A.B和C 3跟柱子,在A上从下往上按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的 ...

  2. 河内塔c语言编程,〖C语言程序设计〗汉诺塔游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序执行 当输入10时(搬十个盘子) Input the munber of diskes: 10 The step to moving 10 diske ...

  3. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  4. 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏

    2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...

  5. 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现

    递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...

  6. CCF NOI1070 汉诺塔游戏

    问题链接:CCF NOI1070 汉诺塔游戏. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 汉诺塔由编号为1到n大小不同的圆盘和三根柱子a,b,c组成,编号越小盘子越小.开 ...

  7. 汉诺塔游戏(java)

    大家好,今天我们来解决一个很有意思的游戏:汉诺塔游戏. 先来带大家了解下这个汉诺塔游戏吧! 汉诺塔由来:法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一 ...

  8. c语言 汉诺塔游戏下载,使用C语言解决益智游戏——“汉诺塔”

    说明: 文章所有内容截选自实验楼教程[3个C语言实例带你掌握递归方法论],教程里还有两个实例,感兴趣的可以点击查看: 文章主要是带你通过解决这个游戏来利用递归解决实际问题并掌握其核心思想,懂得如何使用 ...

  9. 汉诺塔游戏java下载,利用python实现汉诺塔游戏

    本文实例为大家分享了python实现汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.汉诺塔 汉诺塔问题是一个经典的递归问题,对于这个问题,我们可以把它简单的去看成是如何用n-1去表示n. 在A,B ...

  10. 数据结构课设——汉诺塔游戏演示

    源代码下载地址:数据结构课设--汉诺塔游戏演示 一. 问题描述 汉诺塔游戏问题中的数据元素具有如下形式: lchild:左孩子结点 rchild:右孩子结点 num:该移动步骤需要移动的盘子的编号 s ...

最新文章

  1. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...
  2. 云时代的安全解读:云安全≠云计算安全
  3. 软件容量测试和压力测试区别,性能测试、负载测试、压力测试、容量测试的区别...
  4. POJ1611-嫌犯【图论,并查集】
  5. OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)
  6. 性能测试和性能分析的基础概念
  7. 特征筛选5——距离相关系数筛选特征(单变量筛选)
  8. django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
  9. LeetCode Encode and Decode TinyURL
  10. HttpHelper使用记录
  11. 关于新建android项目时 appcompat_v7报错问题的一点总结
  12. c语言读取文件指定行和列
  13. Python——简化表达
  14. 服装管理系统总体概述
  15. arcgis,裁剪投影不一致的矢量和栅格
  16. ADSL 登陆账号密码嗅探器
  17. H3C网络搭建入门(H3C、Oracle、CRT三种软件的关联,以便于模拟实际)
  18. 今天接到一个诈骗电话!!!原来有这么多的受害者
  19. 如何快速搞一个导播系统?
  20. msf工具之木马程序制作以及伪装

热门文章

  1. date 减去固定时长_javascript – 从Date对象减去日/月/年
  2. 第58课 百钱买百鸡 《小学生C++趣味编程》
  3. 【C#桌面应用】第四节:制作简单的登录注册模拟窗口-登录部分的模拟
  4. 2017年最新的全国省市sql数据
  5. llinux c 语言延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写
  6. C++学习之CodeBlocks安装与调试
  7. Linux基础学习九:Mysql读写分离原理以及详细搭建步骤
  8. springmvc登录拦截器访问报错 SyntaxError: expected expression, got ''
  9. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
  10. Qt文档阅读笔记-Custom Items Example解析