知识的海洋,代码的世界
排序算法总结
选择排序:不稳定,时间复杂度 O(n^2)
  function select(arr){
     if(arr.length<=1){
   return arr;
  }
    else{
     for(var i=0;i<arr.length;i++){
       for(var j=i+1;j<arr.length;j++){
         if(arr[i]>arr[j]){
             var temp=arr[i];
                 arr[i]=arr[j];
                 arr[j]=temp;
            }
         } 
       }
       return arr; 
     }
    }
alert(select([12,23,1,23,3,44,21]));
冒泡排序:稳定,时间复杂度 O(n^2)
 function subble(arr){
   if(arr.length<=1){
     return arr;
  } 
  else{
    for(var i=0;i<arr.length;i++){
      for(var j=0;j<arr.length-i;j++){
       if(arr[j]>arr[j+1]){
         var temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
      }
     }
  return arr;
  }
}
  alert(subble([1,234,45,34]));
快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2)
      function quick(arr){
    if(arr.length<=1){
        return arr;
    }
    else{
    var left=[];
    var right=[];
    var middle=arr[0];
    for(var i=1;i<arr.length;i++){
        if(arr[i]<middle){
            left.push(arr[i]);
        }
        else{
            right.push(arr[i]);
        }
    }
    return quick(left).concat([middle],quick(right));
    }
}
alert(quick([1,23,34,2,3,5,2]));
线性查找
        function linesearch(arr,x){
    for(var i=0;i<arr.length;i++){
        if(arr[i]==x){
            return i;
        }
    }
    return -1;
}
alert(linesearch([1,23,13,23,34,2,34],23));
二分查找
                function two(arr,x){
    var low=0;
    var high=arr.length-1;
    while(low<=high){
        var middle=Math.floor((low+high)/2);
        if(x==arr[middle]){
            return middle;
        }
        if(x<arr[middle]){
            high=middle-1;
        }
        else{
            low=middle+1;
        }
    }
    return -1;
}
alert(two([1,2,3,4,23],3));
查找字符串中出现最多的字母
var str='sddddrtkjsfkasjdddj';
 function Num(str){
     var obj={};
     for(var i=0,len=str.length;i<len;i++){
         if(obj[str[i]]){
             obj[str[i]]++;
         }
         else{
             obj[str[i]]=1;
         }
     }
     var num=0;
     var cha='';
     for(x in obj){
         if(obj[x]>num){
             num=obj[x];
             cha=x;
         }
     }
  alert("出现最多的字符是:"+cha+",次数为:"+num);
 }
 Num(str);
字符串驼峰转换
   var str='border-bottom-fix';
function Change(str){
    var arr=str.split('-');
    for(var i=1;i<arr.length;i++){
        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
    }
    str=arr.join('');
    return str;
}
alert(Change(str));
clone函数实现对5中数据类型的复制
//实现clone技术,可以对5种数据类型进行复制
    //方法一
Object.prototype.clone=function(){
    var o=this.constructor==="Array"?[]:{};
    for(e in this){
        o[e]=typeof this[e]==="object"?this[e].clone():this[e];//为对象添加属性
    }
    return o;
}
apply与call与bind
//call:为某个方法添加具体的对象和参数
          //            var obj={num:2};
          //            var addToThis=function(a){
          //                return this.num+a;
          //            }
          //            console.log(addToThis(5));//NaN
          //          console.log(addToThis.call(obj,3));//5
                      /*call(),第一个参数是对象,第二个参数是参数*/
          //         var obj={num:2};
          //            var addToThis=function(a,b,c){
          //                return this.num+a+b+c;
          //            }
          //            console.log(addToThis(5));//NaN
          //          console.log(addToThis.call(obj,3,1,2));//8
                     //apply 为某个方法添加具体的对象和参数
          //         
          //         var obj={num:2};
          //            var addToThis=function(a,b,c){
          //                return this.num+a+b+c;
          //            }
          //            console.log(addToThis(5));//NaN
          //          console.log(addToThis.apply(obj,[1,2,3]));//8
          //          
          //          //bind 
          //          var obj1={nums:3};
          //          var addTo=function(a,b,c){
          //              return this.nums+a+b+c;
          //          }
          //          var bound=addTo.bind(obj1);//先把obj1添加到addTo这个方法中
          //          console.log(bound(1,2,3));//9
           //call()方法的使用
           var obj1={a:3};
           var add1=function(a1,a2,a3){
              return this.a+a1+a2+a3;
           }
           console.log(add1.call(obj1,1,2,3));//9
           //apply()方法的使用
           var obj2={b:3};
           var add2=function(b1,b2,b3){
              return this.b+b1+b2+b3;
           }
           console.log(add2.apply(obj2,[1,2,3]));//9
           //bind()方法的使用
           var obj3={c:3};
           var add3=function(c1,c2,c3){
              return this.c+c1+c2+c3;
           }
           var bound=add3.bind(obj3);//先把obj3添加到方法里
           console.log(bound(1,2,3));//9
100台阶问题
//有100格台阶,可以跨1步可以跨2步,那么一个有多少种走法
function Step(){
    this.n1=1;
    this.n2=2;
    this.total=100;
    this.get=getfunction;
}
function getfunction(){
    for(var i=2;i<this.total;i++){
        var res=this.n1+this.n2;
        this.n1=this.n2;
        this.n2=res;
    }
    return res;
}
var str=new Step();
var strs=str.get();
alert(strs);
验证邮箱
        <form action="" name="mydata" onsubmit="return emailCheck(this)">
            Email Address:
            <input type="text" name="myemail"><br />
            <input type="submit" value="Done">
                <input type="reset"><!--重置-->
        </form>
        <script>
            function emailCheck(info){
                //判断邮箱是否合理
                if((info.myemail.value.indexOf("@")!=-1)&&
                (info.myemail.value.indexOf(".")!=-1)){
                    alert(info.myemail.value+"邮箱合理!");
                    return true;
                }
                else{
                    alert("邮箱不合理");
                    return false;
                }
}
异常处理问题
<form action="">
    <label for="email">Email:</label><br />
    <input type="email" name="email" id="email" value="" /><br />
</form>
<button class="btn" onclick="emailCheck()">提交</button>
<div id="console">
</div>
<script>
    function emailCheck(){
        try{
            check();
        }
        catch(error){
            document.getElementById("console").innerHTML='<h3               style="color:red">'+error.message+'</h3>';
        }
    }
    function check(){
        var emailname=document.getElementById("email").value;
        if(emailname.length==0){
            throw new Error("邮箱不能为空!");
        }
        else if((emailname.indexOf("@")===-1)&&(emailname.indexOf(".")===-1)){
            throw new Error("邮箱不合法");
        }
        document.getElementById("console").innerHTML="邮箱合法";
    }
5.初识ajax
封装了一些ajax方法
jsonp运用百度数据
<div id="box">
 <h1>jsonp 运用百度数据</h1>
 <input type="text" id="search" value="搜索一下"
   onfocus="this.value=''"
   onblur="if(this.value==''){this.value='搜索一下'}">
     <ul id="list">
     </ul>
 </div>
 <script>
 var list=document.getElementById("list");
 var oSearch=document.getElementById("search");
 var oS;
 oSearch.onkeyup=function(){
     var val=this.value;
     oS=document.createElement("script");
     oS.src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd="+val+"&cb=fly"
 document.body.appendChild(oS);
 }
 function fly(mJson){
     list.innerHTML="";
     for(var i=0;i<mJson.s.length;i++){
         list.innerHTML+='<li><a href="https://www.baidu.com/s?wd='+mJson.s[i]+'" target="_blank">'+mJson.s[i]+'</a></li>';
     }
     document.body.removeChild(oS);
 }
 </script>
get方法
    function username(str,successCall,errorCall){
 var xmlHttp;
  //处理兼容
  if(window.XMLHttpRequest){
  xmlHttp=new XMLHttpRequest();
   }
 else{
   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
     }
 //配置信息
      xmlHttp.open("GET","username.php?name="+str,true);
  //发送
  xmlHttp.send(null);
  //监听状态
   xmlHttp.onreadystatechange=function(){
   if(xmlHttp.readyState==4){
     if(xmlHttp.status=200){
       if(successCall){
           successCall(xmlHttp.responseText);
        }    
      }
    }
  else{
    if(errorCall){
        errorCall(xmlHttp.status);
   }    
        }
      }
    }
    //运用
   var username1=document.getElementById("username");
   var txt=document.getElementById("txt");
    username1.onkeyup=function(){
username(this.value,successCall,errorCall);
function successCall(responseXML){
    txt.innerHTML=responseXML;
 }
 function errorCall(statusText){
   txt.innerHTML=statusText;
}
 }
  //对应的php文件
   <?php
 //准备数据
  $arr=["root","host","baidu","hello"];
  $name=$_GET["name"];
  if(in_array($name, $arr)){
      echo "该用户名已经注册,请换一个名称";    
   }
   else{
       echo "注册成功";
   }
   ?>