01回顾
知识回顾:
- 程序语句
应用程序 = 程序语句 + 数据结构 + 算法
- 数组基础
- 数组是做什么的?
- 数组创建方式
- 访问数组元素
+ 索引号
- 数组length属性
- 数组遍历
- 数组数据类型Array
- 数组常用方法
- push
- unshift
- pop
- shift
- splice
- sort
- reverse
- join
- indexOf
- includes
...
- 数组内存结构
内存区域划分
+ 栈区域
基本数据类型变量
引用变量
+ 堆区域
复杂数据类型也叫对象类型
02数组常用方法
1、join
=>作用: 将数组元素按指定字符拼接成字符串返回
=>参数: 指定字符
=>返回值: 返回拼接之后的字符串 | 原数组并没有改变
2、indexOf
=>作用: 返回数组元素索引号
=>参数: 数组元素
=> 返回值: 索引号
若参数写的元素不存在,则返回-1
拓展: 判断元素是否在数组中
arr.indexOf(50) == -1
3、includes
=>作用:检索元素是否在数组中
=>参数:数组的元素
=>返回值:true | false
03数组遍历常用方法
0、for循环
1、forEach
作用:循环遍历
语法:
arr.forEach(function(item,index,arr){
//item 数组元素 此项必须有,其余可省略
//index 元素索引号
//arr 原数组
})
2、map
作用:遍历 & 返回到新数组中
语法:同上
var newArr = arr.map(function(item,index,arr){
return item + 1
})
返回值:新的数组
3、filter
作用:找数组中满足条件的元素,返回到新数组中
语法:
var newArr = arr.filter(function(item,index,arr){
return item > 1
})
返回值:新的满足条件数组
4、find
作用:找数组中满足条件的第一个元素
语法:
var newArr = arr.find(function(item,index,arr){
return item > 1
})
返回值:元素数据
5、every
作用:判断数组中所有元素是否全都满足条件,如果全部满足返回true,否则false
语法:
var newArr = arr.every(function(item,index,arr){
return item > 1
})
返回值:true | false
6、some
作用: 数组中只要有元素满足指定的条件,只要有一个满足返回true
语法:
var newArr = arr.some(function(item,index,arr){
return item > 1
})
返回值:true | false
7、reduce
作用: 累加求和 & 遍历
语法:
var newArr = arr.reduce(function(s,item,index){
return s + item //返回的是s的新的值 累加完毕后赋值给newArr
},0)
返回值:累加的和
参数:两个
第一个:匿名函数(累加,变量)
第二个0:累加和变量S的初始值
04交换数组中两个数的位置
* 交换数组元素
* arr 数组
* i 索引号
* k 索引号
//总结的交换数组元素的公式
function swap(arr,i,k){ //arr数组 i&k 索引号
var temp = arr[i];
arr[i] = arr[k]
arr[k] = temp;
}
function text3(){
var arr = [12,23,34,566]
swap(arr,1,3) //直接使用
console.log(arr);
}
text3()
05排序 (算法)面试题+笔试题
排序: 将一组无序的数据按从小到大或从大到小顺序排列
[98,86,78,66,82]
由小到大排序后
[66,78,82,86,98]
1、冒泡排序,实现排序的一种算法
思想: n个数进行冒泡排序, 需要n-1次冒泡,
每次冒泡操作:相邻两个数,两两比较,前一个数比后一个大,交换位置,一轮比较最大数沉底
0 第一次冒泡: 比较次数 n-1 -0
1 第二次冒泡: 比较次数 n-1 -1
i 第二次冒泡: 比较次数 n-1 -i
请对下列n个数进行冒泡排序?
//外层循环, n个数进行冒泡排序, 需要n-1次冒泡
for(var i = 0; i < n-1; i++){
//内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
for(var j = 0; j < n - 1 -i; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
//由小到大排序
function maoSort(){
var arr = [98,86,79,68,90,82]
var n = arr.length;
//外层循环, n个数进行冒泡排序, 需要n-1次冒泡
for(var i = 0 ;i < n-1;i++){
//内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
for(var j = 0; j < n - 1 - i;j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1]
arr[j+1] = temp;
}
}
}
console.log('由小到大排序',arr);
}
maoSort()
//由大到小排序
function maoSort1(){
var arr = [98,86,79,68,90,82]
var n = arr.length;
//外层循环, n个数进行冒泡排序, 需要n-1次冒泡
for(var i = 0 ;i < n-1;i++){
//内层循环,相邻两个数,两两比较,前一个数比后一个小,交换位置
for(var j = 0; j < n - 1 - i;j++){
if(arr[j] < arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1]
arr[j+1] = temp;
}
}
}
console.log('由大到小排序',arr);
}
maoSort1()
2、选择排序
思想:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(交换位置)
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
//由大到小
function selectSort() {
var arr = [86, 79, 98, 68, 90, 82]
var n = arr.length
//外层循环,n个数进行n-1次选择排序
for (var j = 0; j < n - 1; j++) {
//内层循环
//核心思想: 在未排序的数中找最大数索引号,与未排序的第一个交换位置
var maxIndex = j //最大数索引号 j:0
for (var i = j + 1; i < n; i++) { //不用和自己比较 i= j+1
if (arr[i] > arr[maxIndex]) {
maxIndex = i //maxIndex: 2
}
}
//交换位置
var temp = arr[j]
arr[j] = arr[maxIndex]
arr[maxIndex] = temp
}
console.log('由大到小 ',arr);
}
selectSort()
// 由小到大
function selectSort1() {
//外层循环 n个数进行n-1次循环
var arr = [86, 79, 98, 68, 90, 82]
var n = arr.length
for (var j = 0; j < n - 1; j++) {
//内层循环 从未排序的数中找最小数,找到索引号,与未排序的数中的第一个进行交换位置
var minIndex = j; //记录最小值的索引号
//依次让后面的数与最小值进行比较,如果比最小值小,把值赋给min
for (var i = j + 1; i < n; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i; // 79<86 最小索引号 = 1
}
}
//交换位置
var temp = arr[j];
arr[j] = arr[minIndex]
arr[minIndex] = temp
}
console.log("由小到大排序是",arr);
}
selectSort1(