# 经典算法
# 冒泡排序
冒泡排序是数列排序的算法之一。依次比较大小进行位置上的交换。平均时间复杂度O(n2),空间复杂度O(1)
var bubbleSort = function(arr) {
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr.length;j++){
if(arr[j]>arr[j+1]){
let temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 选择性排序
选择性排序是数列排序的算法之一。平均时间复杂度O(n2),空间复杂度O(1),数据规模越小越好
var selectionSort = function(arr) {
for(let i=0;i<arr.length;i++){
let minIndex=i; //寻找最小值i
for(let j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){
minIndex=j
}
}
let temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
return arr;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 插入排序
选择性排序是数列排序的算法之一。平均时间复杂度O(n2),空间复杂度O(1),数据规模越小越好
var insertSort = function(arr) {
let preIndex,current;
for(let i=1;i<arr.length;i++){
preIndex = i-1;
current=arr[i];
while(preIndex >= 0 && arr[preIndex]>current){
arr[preIndex+1]=arr[preIndex];
preIndex--;
}
arr[preIndex+1]=current
}
return arr;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 线性搜索
这是最基本的搜索算法,机制是将每一个数据结构中的元素和我们要找的元素作比较。比较低效。
var sequentialSearch = function(arr, item) {
for (var i = 0; i < arr.length; i++) {
if (item === arr[i]) {
return i;
}
}
return -1;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 二分搜索
算法要求:数据结构已排序,时间复杂度O(logn)
算法步骤:1.选取中间值。2.如果待搜索值比选中值要小,则返回步骤1并在选中值的左边的子数组中查找。3.如果待搜索值比选中值要大,则返回步骤1并在选中值的右边的子数组中查找。
//非递归
var binary_search=function(arr, key) {
var low = 0,
high = arr.length - 1;
while (low <= high) {
let 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;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//递归
var binary_search2=function(arr,low,high,key) {
if(low>high) return -1;
let mid=parseInt((low+high)/2)
if(arr[mid]==key){
return mid;
}else if(arr[mid]<key){
low=mid+1;
return binary_search2(arr,low,high,key)
}else if(arr[mid]>key){
high=mid-1;
return binary_search2(arr,low,high,key)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
← 中等