最值与排序

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var temp = 0; 
var arr = [98, 98, 99, 96, 102];

// 方式一:Array.sort()升序
arr.sort((a, b) => {
return a - b;//降序 是 b-a
});

// 方式二:一般的 两层 for循环
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}

// 方式三:冒泡排序,与 方式二 思路不同,不过也是 两层 for循环
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length - 1 + i; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//题外:若不需要升、降序,只求一个最值,1层冒泡循环即可
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {//最大值 在数组的 最右边
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}


//以下2种方式 只能求出 最值。没有升、降序!

// 方式四:单层 for循环
//(很重要!由于两个自定义最值一开始就要参与比较。两个 最值必须 相等,且使用数组中的任一个元素进行赋值!!!)
var min = max = arr[0];

for (var i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    } else if (arr[i] < min) {
       min = arr[i];
    }
}

// 方式五:Array.reduce()
var min = max = 0;
max = arr.reduce((a, b) => {
return a > b ? a : b;
});
min = arr.reduce((a, b) => {
return a < b ? a : b;
});