学习JS的第7天

学习JS的第7天

一、冒泡排序

1、冒泡排序算法的原理如下:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(第一轮比较出最大的数,第二轮比较出第二大的数,依次类推每一轮比较出当前轮最大数)

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2、如何理解冒泡排序?

举例:给一个数组 a[5,3,7,1]

//5 3 7 1
/*在第一轮:5 3 7 1 --> 3 5 7 1 -> 3 5 7 1 -> 3 5 1 7 比较了3次 
    第二轮:3 5 1 7 --> 3 5 1 7 -> 3 1 5 7 -> 3 1 5 7 比较了3次
    第三轮:3 1 5 7 --> 1 3 5 7 -> 1 3 5 7 -> 1 3 5 7 比较了3次
    因此,我们可以发现这样 4个数字 只需要比较 3 轮 就可以排完-----n个数字比较n-1轮
    n也可以指 数组的长度
*/
 var a = [5,3,7,1];
for(var i = 0 ; i < a.length-1 ; i++ ) {//比较轮数
    for(var j = 0 ; j < a.length-1 ; j++){  //每一轮的比较次数
        if (a[j]>a[j+1]) {
				var temp;
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
        }
   }
 console.log(a);

但是,上述例子我们发现了还有一些缺点,因为我们每一次比较可以发现 每一轮比完就会比较出当前轮的最大值,那么下一轮比较就没有必要与最大(最小)值进行比较

//5 3 7 1
/*
第一轮(此时i=0):5 3 7 1 --> 3 5 7 1 -> 3 5 7 1 -> 3 5 1 7  最大值为7  比较3次
第二轮(此时i=1):3 5 1 7 --> 3 5 1 7 -> 3 1 5 7 第一轮已经比较出了最大值,就不必再对5 7进行比较 那么7就不用参与比较 参与比较的数字就少一位,变成3位  比较2次
第三轮(此时i=2):3 1 5 7 --> 1 3 5 7 那么同理 前两轮比较出了5 7,那么本轮只需要比较1次(1 3) 就已经完成排序。因此,我们在比较次数中可以得出一个规律:
 						 每轮比较的次数 =   比较轮数 - 当前进行的轮数(i)
                                       j = a.length-1 - i
   
   真正的冒泡排序如下:
*/

var a = [5,3,7,1];
for(var i = 0 ; i < a.length-1 ; i++ ) {//比较轮数
    for(var j = 0 ; j < a.length-1-i ; j++){  //每一轮的比较次数
        if (a[j]>a[j+1]) {               //大于 小于 决定升,降序
				var temp;
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
        }
   }
 console.log(a);

二、sort排序

sort() 方法对数组进行排序

sort()在无参的情况下,默认是以字符编码进行排序,如果是两位及以上的字母或两位及以上的数字,则会优先比较,第一位数字或字母的字符编码,若第一个数字或字母相同,那么接下来会根据第二位的字符编码进行比较并进行排序,若第二位相同,则比较第三位…依次类推。

sort()在有参的情况下:

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


注意这里有一个有趣的现象,在我验证完sort升降序,我们可以发现定义的参数a b,使用该函数过程

会发生颠倒 a b—>b a

 var arr6 = [2, 310];
	  arr6.sort(function(a, b){
    	console.log('a='+a,'b='+b);
	  }) // a  b    它的参数发生颠倒
         // 3   2
		// 10  3

三、选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

算法步骤

1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

3、重复第二步,直到所有元素均排序完毕。


var arr = [9,4,3,0,8,10,6,2];
function ssort(arr){
	var temp;
    // 总共要经过 N-1 轮比较
	for (var i = 0 ; i<arr.length-1;i++) {
		var minindex = i ;		//先预设一个最小下标
		for(var j = i +1; j<arr.length;j++ ){
			if(arr[j]<arr[minindex]){  //寻找最小的数
				minindex = j;          //保存最小数的小标
					}
				}
			//交换 i和最小值 
			temp = arr[i];
			arr[i] = arr[minindex];
			arr[minindex] = temp;	
		}
		return arr; 
	}
	var  res = ssort(arr);
	console.log(res);

四、对象

JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。

在 JavaScript 中,对象是拥有属性和方法的数据。

1、什么是属性和方法?

属性是与对象相关的值。

方法是能够在对象上执行的动作。

举例:汽车就是现实生活中的对象,车长、座位、就是车的属性,车能够启动跑起来就是方法。

2、对象的分类:

1.内建对象

  • 由ES标准中定义的对象,在任何的ES的实现中都可以使用
    一比如: Math String Number Boolean Function object…(简单讲就是只要是JS这些都可以用)

2.宿主对象

  • 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象

    比如比如BOM 、 DOM(这是两组对象)。

3.自定义对象

  • 由开发人员自己创建的对象
3、对象的基本操作

创建对象:

//构造函数方式
var obj = new Object();
//字面量形式
var obj = {};  
var obj2 ={ 
         name:'马保国',
         age :69,
         sex :'男',
        label: '混元形意太极门掌门人',
        skill:function(){
            console.log('闪电五连鞭')}
      }

添加属性

语法:对象.属性名 = 属性值(属性值可以为任意数据类型)

语法2:对象[‘属性名’] = 属性值

//向 obj 中 添加一个name属性值
obj.name='小帅';

obj['name'] = '大帅';

读取对象中的属性 ----------- 语法:对象.属性名

console.log(obj.name);

console.log(obj['name']);

//使用[]操作对象更加灵活,——在[]中可以直接传递一个变量,变量值是多少就读取哪个属性
obj['name'] = '张山';
obj['123'] = '789';
var n = 'name'

console.log(obj['name']); // 张山
console.log(obj[n]); // 张山

修改属性 ------------语法:对象.属性名 = 新值

var obj = new Object();
obj.name='小帅';
console.log(obj.name); //小帅
obj.name='大帅';
console.log(obj.name); //大帅

删除属性 ---------------语法:delete 对象.属性名

delete obj.name;

如果想要知道一个对象里是否含有某个属性,该怎样做?

// in 运算符
// —— 通过该运算符可以检查一个对象中是否含有指定的属性
//   如果有则返回true,没有则返回false
-语法: "属性名" in 对象

console.log("name" in obj);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值