0%

算法

排序


冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var log = console.log.bind(console)
// 元素交换
function exchange(arr ,a , b){
var temp = arr[b];
arr[b] = arr[a];
arr[a] = temp;
}
function compare(arr , count){
//log('2----', arr)
for (var i = 0; i < count ; i++) {
if (arr[i] > arr[i+1]) { // 相邻元素两两对比
var a = exchange(arr ,i , i+1)
//log('3-------',a)
}
}
}
function bubbleSort(array) {
//复制数组
var arr = array.slice(0)
var len = arr.length;
//控制次数
for (var i = 0; i < len; i++) {
var count = len- 1 - i
compare(arr , count)
}
return arr;
}

二分查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array.prototype.binarySearch = function(obj) {
var value = 0;
var left = 0;
var right = this.length;
while (left <= right) {
var center = Math.floor((left + right) / 2);
if (this[center] == obj) {
value = center;
}
if (obj < this[center]) {
right = center - 1;
} else {
left = center + 1;
}
}
alert(value);
}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function quickSort(arr){
if(arr.length<=1){
return arr;//如果数组只有一个数,就直接返回;
}

var num = Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
var numValue = arr.splice(num,1);//找到中间数的值
var left = [];
var right = [];

for(var i=0;i<arr.length;i++){
if(arr[i]<numValue){
left.push(arr[i]);//基准点的左边的数传到左边数组
}
else{
right.push(arr[i]);//基准点的右边的数传到右边数组
}
}
return quickSort(left).concat([numValue],quickSort(right));//递归不断重复比较
}
alert(quickSort([32,45,37,16,2,87]));//弹出“2,16,32,37,45,87”