冒泡排序和递归
冒泡排序:
遍历整个数组,依次比较相邻的两个值,如果前一个值比后面的值大,即交换他们的位置,依照这个规则进行多次并且递减的迭代,直到顺序正确。
实现冒泡排序的思路:
数组中有 n 个数,比较每相邻两个数,如果前者大于后者
,就把两个数交换位置
;这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮
,就完成了所有数的排序。
冒泡排序的实例
function bSort(arr) {
var len = arr.length;
for (var i = 0; i < len-1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
// 相邻元素两两对比,元素交换,大的元素交换到后面
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
//举个数组
myArr = [20,18,27,19,35];
//使用函数
bSort(myArr)
冒泡总结:
1、外层for循环控制循环次数
2、内层for循环进行两数交换,找到每次最大数,放在最后
3、设置标志位,减少不必要的训话次数
递归
定义:
递归函数就是在函数体内调用本函数;
递归函数的使用要注意函数终止条件避免死循环;
递归实现形式:
1.声明一个具名函数,通过函数名调用
function f(a){
if(a<=1){
return 1
}else{
return a*f(a-1)
}
}
但是这样使用会因为 函数名 f 的变化而报错,
f = null
f () // Uncaught TypeError: f is not a function
- 使用arguments.callee代替函数名
在严格模式下不支持使用arguments.callee
3.使用函数表达式
var fun = (function f(a){
if(a<=1){
return 1
}else{
return a*f(a-1)
}
})
// 或:
var f = function (a){
if(a<=1){
return 1
}else{
return a*f(a-1)
}
}
var fun = f;
递归的返回值
.递归函数相当于一种循环调用,需要避免死循环,给定一个条件停止调用
2.递归函数的返回值要返回整个函数