关于冒泡排序以及递归的理解
就是将数组的数据循环并排序,重新组成新的数组,就是冒泡排序
例如:
//这里我们先定义一个随机数组
var arr = [10000, 5888, 12000, 6999, 7000, 3000, 4500, 1200, 6000]
//首先循环数组,来遍历每一项的值
for(var i=0; i<arr.length; i++){
//再次遍历来判断前后两次的值
for(var j=0; j<arr.length; j++){
//当后面一个的值比前面值大时,两个值交换
if(arr[j+1]>arr[j]){
//相当于最简单的a,b值互换
// let a=4,b=5,c; c=a; b=a; a=c;
let flag= arr[j]
arr[j]=arr[j+1];
arr[j+1]=flag
}
}
}
console.log(arr);
//最后会得到
//(9) [12000, 10000, 7000, 6999, 6000, 5888, 4500, 3000, 1200]
使用双循环来进行排序,外部循环控制所有的回合,
内部循环代表每一轮的冒泡处理,进行变量的比较与交换。
下面我们就来写一个例子来练习冒泡排序:
例题:下面数组每次会从最大的值依次消除到最小,请问需要循环几遍来全部消除
var arr = [10000, 5888, 12000, 6999, 7000, 3000, 4500, 1200, 6000]
//按照题目可以得出第一次是 10000,5888,3000,1200
// 第二次是12000,6999,4500
// 第三次是7000,6000,就需要3次循环
for(var i=0; i<arr.length; i++){
let num= arr[i]; //保存的数组每一项
// console.log(num);
for(var j=0; j<arr.length; j++){
//判断当数组上一个值大于下一个值时,将下一个的值替换并删除
if(num > arr[j]){
num = arr[j]
arr.splice(j,1)
// console.log(num);
}
}
// console.log(num);
}
//最后得出的就是最前面的最大值
console.log(arr.length);
对冒泡排序的优化
function fn(data) {
let flag = true // 用来判断数据是否排列完
let swap
while(flag) {
flag = false
for(var j = 1; j<data.length; j++) {
if(data[j - 1] > data[j]){
swap = data[j - 1]
data[j - 1] = data[j]
data[j] = swap
flag = true
}
}
n--
}
return data
}
fn(arr)
递归函数的使用
递归就是函数的自我调用,就是在函数中调用自己。
首先要有判断结束的条件,还有没有满足条件的调用
例如:最简单的1到100值的相加
let i=0;
function fn(num){
//判断num形参的值,如果等于1,就return
if(num==1){
return num
}
//如果不等于1,就让值加函数调用100-1,以此类推。
return num+fn(num-1)
}
console.log(fn(100)); //将100作为实参传进去
//打印出来就是1到100相加的结果
递归函数特点:
- 每次调用都会有一次返回
- 递归函数中必须有终止语句。
- 每一级函数调用时都有自己的变量
递归会消耗大量内存,在实际开发中很少使用
小例子:
const arr = [
{
id: 1,
title: "课程1",
children: [
{id: 4,title: "课程1-1"},
{
id: 5,
title: "课程1-2",
children: [
{ id: 6, title: "课程1-2-1" },
{ id: 7, title: "课程1-2-2" },],
},
],
},
{ id: 2, title: "课程2" },
{ id: 3, title: "课程3" },
];
将上面的json数据递归平铺到数组里面
let list=[];
function fn(arr){
arr.forEach(item => {
if(item.children){
fn(item.children)
}
list.push(item)
list.forEach(item=>{
delete item.children
})
});
}
fn(arr)
console.log(list);
//打印结果 [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
// 0: {id: 4, title: "课程1-1"}
// 1: {id: 6, title: "课程1-2-1"}
// 2: {id: 7, title: "课程1-2-2"}
// 3: {id: 5, title: "课程1-2"}
// 4: {id: 1, title: "课程1"}
// 5: {id: 2, title: "课程2"}
// 6: {id: 3, title: "课程3"}
// length: 7