var exampleArr = [8, 94, 15, 88, 55, 76, 21, 39];
function sortArrByBubble(arr) {
for (i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
sortArrByBubble(exampleArr);
console.log(exampleArr);
复制代码
二路归并排序主旨是“分解”与“归并”算法
分解: 数组
一、将一个数组分红两个数组,分别对两个数组进行排序。bash
二、循环第一步,直到划分出来的“小数组”只包含一个元素,只有一个元素的数组默认为已经排好序。测试
归并:ui
function mergeSort(arr) {
// 设置终止的条件,
if (arr.length < 2) {
return arr;
}
//设立中间值
var middle = parseInt(arr.length / 2);
//第1个和middle个之间为左子列
var left = arr.slice(0, middle);
//第middle+1到最后为右子列
var right = arr.slice(middle);
if (left == "undefined" && right == "undefined") {
return false;
}
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
//把left的左子树推出一个,而后push进result数组里
result.push(left.shift());
} else {
//把right的右子树推出一个,而后push进result数组里
result.push(right.shift());
}
}
//通过上面一次循环,只能左子列或右子列一个不为空,或者都为空
while (left.length) {
result.push(left.shift());
}
while (right.length) {
result.push(right.shift());
}
return result;
}
// 测试数据
var nums = [6, 1, 4, 8, 2, 7, 3, 5];
console.log(mergeSort(nums))
复制代码
function Fibonacci(n) {
if (n <= 1) {
return 1
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
console.log(Fibonacci(8))
// 输出结果34
复制代码
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。 查找过程能够分为如下步骤:spa
非递归算法code
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 44, 86];
function binarySearch(arr, key) {
var low = 0,
high = arr.length - 1;
while (low <= high) {
var 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 result = binarySearch(arr, 10);
console.log(result); // 9 返回目标元素的索引值
复制代码
递归算法cdn
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 44, 86];
function binarySearch(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 binarySearch(arr, low, high, key);
} else if (arr[mid] < key) {
low = mid + 1;
return binarySearch(arr, low, high, key);
}
};
var result = binarySearch(arr, 0, 13, 10);
console.log(result); // 9 返回目标元素的索引值
复制代码