第一次面试问题总结

  • 冒泡排序,快速排序,二分算法(升序)
    冒泡排序:从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);
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值