常见算法

1.冒泡排序

var arr = [98, 2, 56, 42, 85, 11, 23, 67, 95];
//冒泡排序
// 方式一
for(var i = 0; i < arr.length - 1; i++) {
    for(var j = 0; j < arr.length - i - 1; j++) {
        if(arr[j] > arr[j + 1]) {
            var temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

// 方式二
for(var i = 0; i < arr.length - 1; i++) {
    var index = i;
    for(var j = i + 1; j < arr.length; j++) {
        if(arr[j] < arr[index]) {
            index = j;
        }
    }
    if(index != i) {
        arr[i] = arr[i] + arr[index];
        arr[index] = arr[i] - arr[index];
        arr[i] = arr[i] - arr[index];
    }
}
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

2.选择排序

//选择排序
for(var i = 0; i < arr.length - 1; i++) {
    for(var j = i + 1; j < arr.length; j++) {
        if(arr[i] > arr[j]) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}
// console.log(arr);
1
2
3
4
5
6
7
8
9
10
11

3.快速排序

//快速排序
function quickSort(arr) {
    if(arr.length < 2) {
        return arr;
    }
    var midindex;
    //获取数组的中间索引值
    if(arr.length % 2 == 0) {
        midindex = arr.length / 2;
    } else {
        midindex = (arr.length - 1) / 2;
    }

    var left = [];
    var right = [];
    //循环与中间索引的具体数组值作比较,比中间值小,放在左边的数组,比中间值大,放右边数组,等于的时候,结束本次循环
    for(var i in arr) {
        if(i != midindex) {
            if(arr[i] <= arr[midindex]) {
                left.push(arr[i]);
            } else {
                right.push(arr[i])
            }
        }
    }
    return quickSort(left).concat(arr[midindex]).concat(quickSort(right));
}
console.log(quickSort(arr));
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
28

4.插入排序

//插入排序
var arr = [98, 2, 56, 42, 85, 0, 100, 11, 23, 67, 95];

function insertSort(arr) {
    var list = [arr.shift()];
    //或者这样写var list = [arr[0]];对原数组不影响
    for(var i = 0; i < arr.length; i++) {
        //for(var i=1;i<arr.length;i++){
        for(var k = list.length - 1; k >= 0; k--) {
            if(arr[i] < list[k]) {
                list[k + 1] = list[k];
                if(k == 0) {
                    list[k] = arr[i];
                    break;
                }
            } else {
                list[k + 1] = arr[i];
                break;
            }
        }
    }
    return list;
}
//这样会对原来的数组产生影响var list = [arr.shift()];
console.log(insertSort(arr));
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