二分查找
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
参考代码:
//递归算法
function binary_search(arr, low, high, key) {
if (low > high) {
return -1;
}
var mid = parseInt((high + low) / 2);
if (arr[mid] === key) {
return mid;
} else if (arr[mid] > key) {
high = mid - 1;
return binary_search(arr, low, high, key);
} else if (arr[mid] < key) {
low = mid + 1;
return binary_search(arr, low, high, key);
}
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 44, 86];
var result = binary_search(arr, 0, 13, 10);
console.log(result); //9返回目标元素的索引值
//非递归算法
function binary_search(arr, key) {
var low = 0,
high = arr.length - 1;
var mid;
while (low <= high) {
mid = parseInt((high + low) / 2);
if (key === arr[mid]) {
return mid;
} else if (key > arr[mid]) {
low = mid + 1;
} else if (key < arr[mid]) {
high = mid - 1;
} else {
return -1;
}
}
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 44, 86];
var result = binary_search(arr, 10);
console.log(result); // 9返回目标元素的索引值
贪心算法
贪心算法是指:在每一步求解的步骤中,它要求“贪婪”的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。
贪心算法每一步必须满足一下条件:
1、可行的:即它必须满足问题的约束。
2、局部最优:他是当前步骤中所有可行选择中最佳的局部选择。
3、不可取消:即选择一旦做出,在算法的后面步骤就不可改变了。
参考代码:
//贪心算法 钱币找零问题
//每一步尽可能用面值大的纸币即可。
//在日常生活中我们自然而然也是这么做的。在程序中已经事先将Value按照从小到大的顺序排好。
function MinCoinChange(coins) {
coins = coins.sort(function (a, b) {
return b - a;
});
this.makeChange = function (amount) {
var change = [],
total = 0;
for (var i = 0; i < coins.length; i++) {
var coin = coins[i];
while (total + coin <= amount) {
change.push(coin);
total += coin;
}
}
return change;
}
}
var coin = new MinCoinChange([1, 5, 10, 20, 50, 100]); //人民币仅由10元、5元、1元
console.log(coin.makeChange(101)); //(2) [100, 1]
网友评论