基础算法(二分,去重,排列)
来源:互联网 发布:韩顺平java全套视频 编辑:程序博客网 时间:2024/05/21 12:39
《算法图解》
用js来练习书中例子
二分法
查找目标数值在数组中的index值。
原理:每次猜中间值,得出过大还是过小,最多只需log2(n)步,比如100个为7步,1000个为14步。
列表必须为有序,就是数组为从小到大排列。
JS算法
接受数组list
和目标值item
,
返回item
的index
值(目标位置)
思路: 定义 low mid high3个变量(为index数),list[mid]
对比item
,
mid值等于low+high/2, (取整即可。cell,floor,round都可以,有细微差别,可忽略)。
- 如果猜的值大于目标值->往小猜->目标mid值左边中点->最高值=中点-1
- 如果猜的值小于目标值->往大猜->目标mid值右边中点->最低值=中点+1
function index_search (list, item){ var low = 0; var high= list.length-1; while (low <= high){ var mid = Math.floor((low + high)/2);list[mid] if (list[mid] == item){ return mid; } else if (list[mid] > item){ high = mid - 1; } else{ low = mid +1; } } return "none";}console.log(index_search([1,2,5,7,8,9,11],18)); //none
去重
从0开始,左到右,通过逐一对比右边有没有重复,没有就push保存,有就i+进入下一个循环
function unique(array){ var temp =[]; var index =[]; //保存index值,可选 for (var i = 0; i < array.length; i++){ //往右边逐一对比,有相同就跳入下一i循环,直至这个i没有相同 for (var j = i + 1; j < array.length; j++){ if (array[i] == array[j]){ i++; //进入下一个i循环 j = i; } } //到这说明此数右边已经没有相同 temp.push(array[i]); index.push(i);} //同时返回index的值 console.log(index); return temp;}var aa = [1,2,2,3,4,5,2,3,6,5];console.log(unique(aa))
排列
找最小值
根据左边逐一对比右边是不是最小
function findsmall(array){ var min = array[0]; var index = 0; for (var i=1;i<array.length; i++) { if (array[i] < min){ min = array[i]; index = i; } } console.log(index); return min;}
快速排序
D&C算法 divide and conquer 分而治之,递归式问题解决方法。
每次递归用都必须缩小问题的规模
快速排序
根据基准数值,将剩余数值分为左右两边,使用遍历,不断切分,直至分成1个。
var quickSort = function(arr) { if (arr.length < 2) { return arr; } var pivotIndex = Math.floor(arr.length / 2); //选中基准线数值,并与原数组分离 var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = []; for (var i = 0; i < arr.length; i++){ if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); };var aa = [85,24,63,45,17,31,96,50]console.log(quickSort(aa))
阅读全文
0 0
- 基础算法(二分,去重,排列)
- 全排列算法 -- 字典序法(去重)
- Watchmen(排列,去重)
- 递归的全排列去重算法
- 全排列去重
- 算法基础之数组去重
- 去重的全排列
- 字符串的全排列(包括去重)
- 编辑距离(同源去重算法)
- 数组去重算法
- 去重算法(转)
- Java去重算法
- 去重算法
- codeforces 651C. Watchmen(排列,去重)
- iOS 数组去重, 数组倒叙排列
- 全排列 去重 非字典序
- JavaScript趣题:全排列去重
- 全排列 【dfs回溯】+【set去重】
- 关于The user specified as a definer ('root'@'%') does not exist 解决方法
- block与inline 元素
- hdu 1124 圆桌会议
- MFC中有三种文件操作的类 CFile ,CArchive,CDocument
- 【Angular2】插值表达式如何嵌套显示
- 基础算法(二分,去重,排列)
- 后台管理布局之模板继承2 补充 继承拼接
- Arctic Network POJ
- Python 变量类型
- Java多线程之线程安全与异步执行
- 卷积神经网络中十大拍案叫绝的操作
- Anaconda
- HDU
- 【二叉树经典问题】 144. Binary Tree Preorder Traversal