23函数递归算法 数组 冒泡排序法

23函数递归算法 数组 冒泡排序法

一、递归

特点

- 在函数里面调用自身
- 必须有一个明确的递归结束条件,这个称之为递归出口
- 不确定循环执行的次数

菲波拉契数

求斐波那契数的第n个数 1 1 2 3 5 8 …

function fn(n) {

	//设置出口

	if (n == 1 || n == 2) {
	return 1
	}
	return fn(n - 1) + fn(n - 2)
}
alert(fn(prompt("需要算出的第n项值")))

二、数组

数组

数组是一个可以存储一组或一系列相关数据的容器,一组数的集合,就是数组

数组的创建

1、使用new关键字和array ()来创建数组

var arr = new array();	//创建一个空数组
	//数组里面的值可以为任意类型的值,如果为字符型需要加"",纯数字可以不加,多个值用","隔开

2、使用[]方法创建一个数组

var arr = [];	//创建一个空数组

数组的索引 (index)

- 数组中有多个值,每个值都有一个”编号”,通过”编号”可以访问到数组中的每个值,数组中的”编号”又称”下标”或”索引号”
- 数组中的”下编号”是从0开始的正整数
- 第1个数组元素下标一定是0,最后一个数组元素的下标是:长度-1,即arr.length-1
- 使用数组的目的,就是使用循环遍历数组很方便

数组的属性

数组对象属性length:就是指数组中元素的总个数

数组元素的访问

//数组名称加上编号就可以访问数组
	arr[0]	//访问数组名为arr的数组的第一项
	arr[arr.length-1]	//访问数组,名为arr的数组的最后一项

三、数组的操作

var arr = [0, 1, 2, 3, 4, 5]

- 读取元素	读取已经存在下标的元素
	形如 arr[0]	//0

- 修改元素	修改已经存在下标的元素的值 (重新赋值)
	形如 arr[0] = 6	//arr = [6, 1, 2, 3, 4, 5]

- 增加元素	添加一个不存在的下标的元素
	形如 arr[6] = 6	//arr = [0, 1, 2, 3, 4, 5, 6]
		arr[7] = 7	//arr = [0, 1, 2, 3, 4, 5, empty, 7]

- 删除元素	使用关键字delete,只能删除元素值,而下标还在
	形如 delete(arr[0],arr[1])	//arr = [empty, empty, 2, 3, 4, 5]

数组的遍历

从数组把数据一个一个的读取或写入

//使用for循环遍历
var arr = [1, 2, 3 ,4 ,5 ,6]

//顺序遍历
for (var i = 0; i < arr.length; i++){
    alert(arr[i])
}

//逆序遍历
for (var i = arr.length-1; i >= 0;i--){
    alert(arr[i])
}

四、数组的方法

var arr = [0, 1, 2, 3, 4, 5]

shift()		删除数组中第一个元素,并将长度减1
	形如arr.shift()	//arr = [1, 2, 3, 4, 5]

pop()	删除数组中最后一个元素,并将长度减1
	形如arr.pop()		//arr = [0, 1, 2, 3, 4]

unshift()	往数组前面添加一个或多个数组元素,长度要改变
	形如arr.unshift(-2, -1)	//arr = [-2, -1, 0, 1, 2, 3, 4, 5]

push()	往数组结尾添加一个或多个数组元素,长度要改变
	形如arr.push(6, 7)	//arr = [0, 1, 2, 3, 4, 5, 6, 7]
var arr = [0, 1, 2, 3, 4, 5]
var arr1 = [0, 1]
var arr2 = [2, 3]
var arr3 = [4, 5]

concat()	方法用于链接两个或多个数组,不改变原数组,返回一个新的数组
	形如res = arr1.concat(arr2,arr3)	//res = [0, 1, 2, 3, 4, 5]

reverse()	逆向排序,元素组也被逆向排序了
	形如arr.reverse()	//arr = [5, 4, 3, 2, 1, 0]

toString()	将数组转成字符串
	形如res = arr.toString()	//res = 0,1,2,3,4,5

join()	将数组转成字符串,中间以拼接符链接
	形如res = arr.join("+")	//res = 0+1+2+3+4+5
var arr = [0, 1, 2, 3, 4, 5]

slice(start,end)	不修改原数组,将数组中的指定区域数据提取出来
	start开始
	end结束
    如果参数是负值表示从倒数开始,不含结束位置
    形如res = arr.slice(0,2)	//res = [0, 1]

splice()
删除	用于删除元素,两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数)
	形如arr.splice(0, 2)	//arr = [2, 3, 4, 5]

插入	向数组指定位置插入任意项元素,三个参数,第一个参数(开始位置),第二个参数(0),第三个参数(插入的项)
	形如arr.splice(0, 0, -2, -1)	//arr = [-2, -1, 0, 1, 2, 3, 4, 5]

替换	向数组指定位置插入任意项元素,同时删除任意数量的项,三个参数,第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)
	形如arr.splice(0, 3, 2, 0, 1)	//arr = [2, 0 ,1, 3, 4, 5]

五、数组的排序

sort()	对数组进行排序

a-b	如果它的值为正值,就交换它们的位置
	顺序
b-a  如果值为正数,交换它们的位置
	倒序
var arr = [1, 6, 88, 3, 55, 7]

res = sort(function(a,b){
    a-b
})		//res = [1, 3, 6, 7, 55, 88]

res = sort(function(a,b){
    b-a
})		//res = [88, 55, 7, 6, 3, 1]

冒泡排序法

为了方便调用可以写为函数的形式

function sorting(){

	//设置需要遍历的次数

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

		//遍历的次数,因为每一次都会确定最后一个为最大值,所以遍历的次数为arr.length-i-1

        for(j = 0; j < arr.length - i -1; j==){

			//当前面的数比后面的数大时,将两者的数进行交换

            if(arr[j] > arr[j + 1]){
                temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
            }
        }

		//返回冒泡排序后的数组

        return arr
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值