js算法(二)

例子1:冒泡排序

冒泡排序思想:(1)依次比较两个相邻的数字,小的放前面,大的放后面

//冒泡排序

function bubbleSort(tmpArr) {

   for(var i = tmpArr.length-1; i > 0; i--) {

     for(var j=0; j<i; j++) {
        if(tmpArr[j] > tmpArr[j+1]) {
            swap(j,j+1);
        }
     }
   }
}

function swap(a,b) {
    var tmp = arr[a];

    arr[a] = arr[b];
    arr[b] = tmp;
}

bubbleSort(arr);
console.log(arr);

例子2:快速排序(1)选择一个元素作为基准(2)比该元素小的放在左边,比该元素大的放在右边(3)重复以上步骤

//数组去重快速排序

var arr = [8,10,4,2,5,7,3,5,6,8];

function quickSort(tmpArr) {

 if(tmpArr.length <= 1) {
    return tmpArr;
 }

   var left = [];
   var right =[];
   var index = Math.floor(tmpArr.length / 2);
   var middleVal = tmpArr.splice(index,1)[0];

   // document.write(middleVal);

    for(var i=0; i<tmpArr.length; i++) {
        if(tmpArr[i] > middleVal) {
            right.push(tmpArr[i]);
        }else {
            left.push(tmpArr[i]);
        }
    }
    return quickSort(left).concat(middleVal,quickSort(right));
}


var newArr = quickSort(arr);

console.log(newArr);

3.this关键字

(1)它是个关键字,不能当成变量使用。

(2)代表函数运行时产生的一个对象,只能在函数内部使用。

(3)随着函数的使用场合不同,this会发生改变。

(4)指向调用函数的对象。

例子(1)

function fn() {
  this.x = 'hello';
  console.log(this.x);
}
fn();//hello

例子(2)

function fn() {
  this.x = 'hello';
  console.log(this.x);
  console.log(this.b);
}
var obj = {
  a:fn,
  b:"Object"
}
obj.a();//hello,Object

4.例子(1)

// 打印输出结果

console.log(1 + "2"+"2");   //数字与字符串进行连接,合成一个新的字符串 //122;
console.log(1+ +"2"+"2");   // 一元+操作符可将字符串转换为数字 //‘32’
console.log("A" - "B"+"2");  // NaN(无法转换数字的情况下产生的值) 'NaN2';
console.log("A"- "B"+2);     // NaN + 2 = NaN

例子(2)

    function test() {

      var n = 4399;

      function add() {
        n++;   // 4401
        console.log(n);
      }

      return {
        n: n,
        add: add
      }
    }

    var result = test();
    var result2 = test();


    result.add();       // 4400
    result.add();      //4401
    console.log(result.n);   // 4399
    result2.add();    //  4400

例子(3)

var arr = [];

arr[0] = 0;

arr[1] = 1;

arr.foo = 'c';   // 作为数组的自定义属性添加,首先可以正常使用,但是不会添加到数组的长度内;

console.log(arr.length);//2

例子(4)

  var a = undefined;
  var b = 'false';
  var c = '';

  function print(val) {
     // val === 'undefined';  非空的字符串 string   true    空字符串转换为布尔值  false;  undefined == false;
    if (val) {
      alert(true);
    } else {
      alert(false);
    }

  }

  print(a);  //true
  print(b);   // true
  print(c);   //false

例子(5)

  var person = {
    fname: 'john',
    lname: 'Doe',
    age: 25
  };

  var txt = "";

  for (var o in person) {
    txt += person[o];   //'john';   'Doe';  25;   txt = 'johnDoe25';
  }

  console.log(txt);  //johnDoe25

例子(6)

//考察数组的掌握程度  自身改变操作以及生成新的数组的操作

var arr = [1, 2, 3];

arr.shift();   // arr = [2,3];  arr.shift = [1];

arr.push(1);   //arr = [2,3,1];

arr.unshift(2);  // arr = [2,2,3,1];

var newArr = arr.concat([1, 2]);  //newArr =  [2,2,3,1,1,2];

console.log(newArr);

例子(7)

// JS没有块级作用域

var msg = 'hello';   //几乎没用 障眼法

for (var i = 0; i < 10; i++) {

  var msg = 'hello' + i * 2 + i;  //'hello' + 9*2 + 9;    'hello' + 18 + 9;    'hello189';

}

console.log(msg);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值