🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[toc] # 题1、交换两个数的实现? 答: ~~~ let a = 1 let b = 2 写法一、使用中间变量 let tmp = a a = b b = tmp 写法二、数组赋值 [a,b] = [b,a] ~~~ # 题1、5分钟之内写出冒泡排序法? 答:思路:双层循环,两两比较,交换。 最坏时间复杂度:O(n^2) ~~~ let arr = [3,5,3,1,3,4,5,6,4,3,28,9,7,4,3] // 控制比较的次数 for(let i=0; i<arr.length; i++) { for(let j=0; j<arr.length-1; j++) { // 前一个和后一个比较 if(arr[j] > arr[j+1]) { // 交换 [arr[j], arr[j+1]] = [arr[j+1], arr[j]] } } } ~~~ # 题2、5分钟之内写出折半查找法? 答:前提:只能对已经 `排好序` 的数据使用折半查找法。 思路:每次和中间的元素查找,如果查找的元素比它大,就向右查找中间的,如果小就向左查找中间的。 时间复杂度:O(logn) ![](https://img.kancloud.cn/6b/49/6b49f54559e34b5733b20df03d04122e_734x222.png) 折半查找法代码 ~~~ // 参数一、有序数组 // 参数二、要查找的数字 // 参数三、开始的下标 // 参数四、结束的下标 function halfSearch(arr, key, left, right) { let mid // 中间位置的坐标 while(right>left) { // 计算中间元素的下标 mid = Math.floor((left + right ) / 2) // 如果找到了就直接返回下标 if(key == arr[mid]) { return mid } else if(key < arr[mid]) { // 右边界变为中间元素-1 right = mid-1 } else if(key > arr[mid]) { left = mid+1 } } // 没找到 return -1 } let arr = [1, 4, 7, 8, 12, 34, 66, 212, 67787, 324345] console.log( halfSearch(arr, 67787, 0, arr.length-1) ) ~~~