js数组获取次大次小值(获取数组中的第二大值和第二小值)冒泡排序
时间: 2024-10-28 16:10:30 浏览: 32
在JavaScript中,获取数组中的第二大值和第二小值可以采用两种方法,一种是利用排序,另一种是双重遍历。这里我会分别解释这两种方法,并给出简单的示例。
**方法一:使用排序**
1. 首先对整个数组进行一次排序(升序或降序),得到最大的两个元素即为第二大的和最小的;
2. 排完序后,去掉最大值,再取剩下的最后一个元素就是第二大的值;去掉最小值,取倒数第二个元素就是第二小的值。
```javascript
function getSecondMinMax(arr) {
arr.sort((a, b) => a - b); // 升序排列
const secondMax = arr[arr.length - 2]; // 获取第二大的值
arr.sort((a, b) => b - a); // 降序排列
const secondMin = arr[1]; // 获取第二小的值
return { secondMax, secondMin };
}
let array = [5, 2, 9, 1, 7];
const result = getSecondMinMax(array);
console.log(result); // 输出:{secondMax: 7, secondMin: 2}
```
**方法二:双重遍历**
1. 初始化两个变量`maxValue`和`minValue`为数组的第一个元素,`secondMax`和`secondMin`为负无穷大或正无穷大;
2. 遍历数组,更新`maxValue`, `secondMax`, `minValue`, 和 `secondMin` 的值。
```javascript
function getSecondMinMax(arr) {
let maxValue = minValue = arr[0];
let secondMax = Number.NEGATIVE_INFINITY;
let secondMin = Number.POSITIVE_INFINITY;
for (let i = 1; i < arr.length; i++) {
if (arr[i] > maxValue) {
secondMax = maxValue;
maxValue = arr[i];
} else if (arr[i] > secondMax && arr[i] !== maxValue) {
secondMax = arr[i];
}
if (arr[i] < minValue) {
secondMin = minValue;
minValue = arr[i];
} else if (arr[i] < secondMin && arr[i] !== minValue) {
secondMin = arr[i];
}
}
return { secondMax, secondMin };
}
let array = [5, 2, 9, 1, 7];
const result = getSecondMinMax(array);
console.log(result); // 输出:{secondMax: 7, secondMin: 2}
```
阅读全文