学习前端的第二十三天——数组和冒泡排序

考试周终于来了,忙里偷闲的我又来整理学习笔记了,今天主要学习了数组和冒泡排序,冒泡排序相对来说还是比其他排序方法要好理解。



一、Array数组

数据类型里面分为基本和引用数据类型:

  • 引用(复杂、复合)数据类型里面有哪些?function、Array、object
  • Array数据类型
  • 是一组数的集合,称之为数组

作用:

  • 在实际的开发中遇到很多数据时,使用基本数据类型处理起来非常麻烦,这个时候就可以使用数组数据类型
  • 数组数据类型里面可以放置任意数据类型

创建方式1:

  • 使用构造函数形式创建数组,构造函数在js里面是创建对象的一种方式,数组也可以理解为是对象的一种
  • 构造函数方式是系统给咱们提供的直接创建数组数据类型,构造函数和普通函数的区别在于,构造函数名称首字母是大写
  • 创建方式语法:
    new Array()

创建方式2:

  • 使用字面量形式 使用中括号形式
  • 创建方式语法: [ ]
  • 字面量形式是一种简写形式,理解为是构造函数的简写

相关属性:

  • 在数组创建的时候,系统会默认给每一个数组元素(成员)设置一个序号,把这个序号称之为数组下标
  • 下标的作用是可以帮助咱们获取数组里面的数组元素
  • 属性:length 表示数组的长度
  • 注意点:数组的下标默认是从0开始的

如何操作:

  • 使用下标操作数组
  • 获取数组元素:数组名[下标]
  • 查看数组里面有几个元素(成员) :数组名.length
  • 获取数组里面最后一个元素:数组名.length-1
  • 可以添加数组
    注意:如果下标跳过,数组会默认给我们为空
  • 可以替换数组 ——修改数组,相当于重新赋值
  • 删除数组:delete 数组名[下标];

遍历:

  • 从数组中把数据一个一个的读取或写入。
  • 用代码来说明

var arr = [1, 2, 3, 4, 5, 6];
普通for循环

+ 顺序遍历
+ i表示的是数组的索引,或者叫做下标
for(var i = 0; i<arr.length; i++){
    
    
     alert(arr[i]);
 }

+ 倒序遍历
+ 注意数组遍历是从0开始的,所以 i >= 0
for(var i = arr.length-1; i>=0; i--){
    
    

     alert(arr[i]);
}

forin 

+ 用于遍历数组或者对象的属性(快速遍历)
+ 注意:只能遍历数组和对象(object)
+ 语法:for(变量 in 集合) 集合:数组名和对象名

for(var i in arr){
    
    
	//i默认字符串类型
    alert(arr[i]);
}


补充

+ for 遍历出来的索引类型是number类型
+ for in 遍历出来的索引类型是string类型

引用数据类型叫做对象(object)
+ 语法:var obj = {
    
    'a':1}
+ 对象里面把属性和值叫做键值对 
+ 对象数据类型键要求是字符串类型,创建对象的时候不设置时,默认就是字符串
+ var obj = {
    
    'a' : 1, 'b' : 2}
  //获取对象的值的时候,要求中括号里面对象的键必须加引号
  console.log(obj['a']);
//这里如果需要遍历就得需要 for in


arguments对象:

  • arguments对象是function数据类型默认提供的,和return类似可以使用也可以不使用
  • arguments为了解决函数形参过多的情况使用的
  • 当函数的参数(实参)不确定时可以使用
  • arguments.callee() 用于替代函数名称的
  • arguments.length表示的是实参的个数
  • arguments.callee.length表示的是形参的个数
  • 问题
    1、在实际开发中,当实参不确定的情况下,对应的形参无法确定,当函数的形参过多的情况不利于代码优化的
    2、为了解决这种问题函数给我们提供了一个对象arguments,这个对象里面默认保存了所以实参的内容
  • 数组类型:
    1、真正的数组,自己创建出来的
    2、类(伪)数组,为了方便使用数组的一些方法和属性,模拟的数组

数组的方法
//返回值是被删除的数组成员
shift():删除数组中第一个元素,并将长度减1.	

pop():删除数组中最后一个元素,并将长度减1.

//返回值是数组的长度
unshift():往数组前面添加一个或多个数组元素,长度要改变。

push():往数组结尾添加一个或多个数组元素,长度要改变。


concat():方法用于连接两个或多个数组, 不改变原数组。返回一个新的数组。

//注意:它只会把数组直接反转,不能进行排序处理
reverse():逆向排序, 原数组会也被逆向排序

//注意:原数组不会被改变
toString():将数组转成字符串

join(“拼接符”):将数组转成字符串,中间以拼接符连接

slice(start,end)+ 不修改原数组, 将原数组中的指定区域数据提取出来。
+ start开始 end结束,不含结束位置
+ 如果参数是负值表示从倒数开始

splice():
+ 删除:用于删除元素。
  两个参数,第一个参数(要删除第一项的位置),第二个参数(要删除的项数)
+ 插入:向数组指定位置插入任意项元素。
  三个参数,第一个参数(开始位置),第二个参数(0),第三个参数(插入的项)
  注意:参数20,如果给成其他的值,表示删除几个
+ 替换:向数组指定位置插入任意项元素,同时删除任意数量的项。
  三个参数,第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)



二、冒泡排序

sort排序:

  • 排序功能 从小到大 从大到小
  • sort这个函数的参数就是一个函数

//a-b  如果它的值为正数,就交换它们的位置	从小到大
arr.sort(function (a, b) {
    
     
	return a - b;
});
console.log(arr);

//b-a  如果它的值为正数,就交换它们的位置	从大到小
arr.sort(function (a, b) {
    
     
	return b - a;
});
console.log(arr);


冒泡排序:

  • 思路:一组无序的数字,两两进行比较,将大的放在后面,以此类推
  • 冒泡排序涉及到交换两个变量的值,数组元素的值
  • 交换两个变量的值,借用第三个变量
根据思路手动比较:
	第一次比较:
	3, 5, 1, 7
	第二次比较:
	3, 1, 5, 7
	第三次比较:
	1, 3, 5, 7
	规律:四个数字,其实只比较了三次,就已经出结果了

var arr = [5, 3, 7, 1];
//外层循环执行一次,内层循环执行一轮
for(var i=0; i<arr.length; i++){
    
    
	for(var j=0; j<arr.length; j++){
    
    
		if(arr[j]>arr[j+1]){
    
    
    		var temp;
   			temp = arr[j];
    		arr[j] = arr[j+1];
    		arr[j+1] = temp;
		}	
	}
}
console.log(arr);

3, 5, 1, 7  
第一次比较时已经把最大的比较出来了
3, 1, 5, 7  
第二次比较的时候已经把第二大的比较出来了
1, 3, 5, 7  
第三次比较的时候一行把第三大的比较出来了

优化版:
var num = [5,3,7,1];
function sortBubbling(arr){
    
    
	for(var i=0; i<arr.length-1; i++){
    
    
		//           0<4-1-0  1<4-1-0  2<4-1-0
		//           0<4-1-1  1<4-1-1
		//           0<4-1-2
		for(var j=0; j<arr.length-1-i; j++){
    
    
			console.log(j, j+1);
			if(arr[j]>arr[j+1]){
    
    
				var temp;
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
return arr
}
var res = sortBubbling(num);
console.log(res);

猜你喜欢

转载自blog.csdn.net/Robergean/article/details/118090161