- 冒泡排序,快速排序,二分算法(升序)
冒泡排序:从arr[0]开始,每一组相邻的两个元素间进行比较,两层循环,第一次循环完成后会把最大的数放在最后,第二次循环完
成后会把第二大的数放在倒数第二的位置,直到排序完成。
function bubbingSort(arr){
var len=arr.length;
for(var i=0;i<len;i++){
for(var j=0;j<len-1-i;j++){
if(arr[j]>arr[j+1]){
var tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
return arr;
}
快速排序:实际中最常用的一种排序算法,速度快,效率高。速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后
对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确
位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排
序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
(1)递归方法:
var quickSort = function(arr){
if(arr.length<=1){ //如果数组长度小于等于1无需判断直接返回即可
return arr;
}
var midIndex=Math.floor(arr.length/2); //取基准点
var midIndexVal=arr.splice(midIndex,1); //取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数arr[index+1]
var left=[]; //存放比基准点小的数组
var right=[]; //存放比基准点大的数组
for(var i=0;i<arr.length;i++){ //遍历数组,进行判断分配
if(arr[i]<midIndexVal){
left.push(arr[i]);//比基准点小的放在左边数组
}
else{
right.push(arr[i]);//比基准点大的放在右边数组
}
}
//递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;
return quickSort(left).concat(midIndexVal,quickSort(right));
//concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
//终止条件就是if(left>right) return;后面的代码不再执行了。这个一定要理解。
};
(2)非递归:
待完善
二分算法:二分查找,也为折半查找。首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间
值,持续以上操作,直到找到所在位置为止。
(1)递归
function binarySearch(data,item,start,end){
var end=end || data.length-1;
var start=start || 0;
var m=Math.floor((start+end)/2);
if(item==data[m]){
return m;
}else if(item<data[m]){
return binarySearch(data,item,start,m-1) //递归调用
}else{
return binarySearch(data,item,m+1,end);
}
return false;
}
var arr=[34,12,5,123,2,745,32,4];
binary(arr,5);
(2)非递归
function binarySearch(data, item){
var h = data.length - 1,
l = 0;
while(l <= h){
var m = Math.floor((h + l) / 2);
if(data[m] == item){
return m;
}
if(item > data[m]){
l = m + 1;
}else{
h = m - 1;
}
}
return false;
}
var arr=[34,12,5,123,2,745,32,4];
binarySearch(arr,5);
flex布局(display:flex 是CSS3中新的盒子模型)
display的所有属性
阮一峰的博客 flex属性详解
大神张鑫旭的博客 flex原理解释语义化标签理解
什么是语义化标签,应该注意什么,有什么好处
代码规范的重要性
部分代码规范注意事项对H5的理解?(定义,有哪些新增标签,了解多少)
什么是H5
H5所有标签
新增标签详解
H5新增标签和去除标签部分标签属性的理解和应用
input
img标签的alt和title属性
a标签的target属性作用对继承的理解
浅谈继承
js实现继承的5种方法你了解的数组方法有哪些
常用的数组方法http状态码
2xx:成功 3xx:重定向 4xx:客户端错误 5xx:服务器错误
状态码详解事件冒泡,怎样阻止冒泡
解析冒泡机制
冒泡机制的作用及注意事项
jq阻止事件冒泡
js阻止事件冒泡对原生js的理解
jq是建立在js基础上的
js和jq的优劣势
js和jq的优缺点详解浏览器缓存机制
缓存机制一条龙详解!
不怎么看得懂的链接……模块化开发的好处
模块化优点