经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现
来源:互联网 发布:java生产者和消费者 编辑:程序博客网 时间:2024/06/06 09:13
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代码实现
- 经典代码之冒泡排序,选择排序
- 冒泡排序-JS代码实现
- 八大经典排序算法基本思想及代码实现(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序)
- 冒泡排序、选择排序、插入排序的js实现
- JS经典算法之冒泡排序算法
- 经典排序算法之冒泡、选择和插入排序
- 经典排序之冒泡排序
- 经典排序之冒泡排序
- 经典排序之冒泡排序
- js冒泡排序,选择排序,插入排序
- 冒泡排序、选择排序、插入排序代码
- 选择排序与冒泡法排序的C代码实现
- 选择排序与冒泡法排序的C代码实现
- 冒泡排序,选择排序的的代码实现
- java实现数组的冒泡排序、选择排序代码
- 冒泡排序和选择排序二分查找代码实现
- 选择排序,冒泡排序及二分查找的代码实现
- CentOS 7下MySQL 5.7安装、配置与应用
- 【酷我天气】完整的天气App项目
- 欢迎使用CSDN-markdown编辑器
- Hadoop--06--MapReduce编程基础
- 【BZOJ2049】[Sdoi2008]Cave洞穴勘测
- 经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现
- 加载本地图片oom处理
- 1081. Rational Sum (20)
- C语言nice()函数:改变进程优先顺序
- Codeforces 698A Vacations
- 使用easyui时导入的jar包
- TFS 2015 敏捷开发实践 - 在Kanban上运行一个Sprint
- C++中的explicit关键字
- Android的onCreateOptionsMenu()创建菜单Menu详解