求一个足够长的一维数组中第三大值,数组中元素全是number类型的
1、使用排序的方法
可以降序或升序排序,这种方法可以求得任意第几大或第几小的值
// 排序的方法有很多,以冒泡排序 降序为例:
var arr = [6, 10, 9, 3, 8, 15, 11, 16, 14, 19, 1, 7, 2, 18, 17];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[j] < arr[j + 1]) {
var item = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = item;
}
}
}
console.log(arr);
console.log("第三大值为" + arr[2]);
2、假设并比较,先求最大值,然后求次大值,最后求第三大值
但这种方法要遍历数组三次
var arr = [6, 10, 9, 3, 8, 15, 11, 16, 14, 19, 1, 7, 2, 18, 17];
// 求最大值
var fMax = arr[0];
for (let i = 1; i < arr.length; i++) {
if (fMax < arr[i]) {
fMax = arr[i];
}
}
console.log("最大值为:" + fMax);
// 求次大值
var sMax = arr[0];
for (let i = 1; i < arr.length; i++) {
if (sMax < arr[i] && fMax > arr[i]) {
sMax = arr[i];
}
}
console.log("次大值为:" + sMax);
// 求第三大值
var tMax = arr[0];
for (let i = 1; i < arr.length; i++) {
if (tMax < arr[i] && sMax > arr[i]) {
tMax = arr[i];
}
}
console.log("第三大值为:" + tMax);
3、假设并比较 遍历数组一次 的方法
var arr = [6, 10, 9, 3, 8, 15, 11, 16, 14, 19, 1, 7, 2, 18, 17];
// 求最大值和次大值
var firstMax = arr[0];
var secondMax = arr[1];
for (let i = 1; i < arr.length; i++) {
if(firstMax < arr[i]){
secondMax = firstMax;
firstMax = arr[i];
}else if(secondMax < arr[i] && firstMax > arr[i]){
secondMax = arr[i];
}
}
console.log("最大值为:" + firstMax);
console.log("次大值为:" + secondMax);
// 求最大值、次大值和第三大值
var fMax = arr[0];
var sMax = arr[1];
var tMax = arr[2];
for (let i = 1; i < arr.length; i++) {
if (fMax < arr[i]) {
tMax = sMax;
sMax = fMax;
fMax = arr[i];
} else if (sMax < arr[i] && fMax > arr[i]) {
tMax = sMax;
sMax = arr[i];
} else if(tMax < arr[i] && sMax > arr[i]) {
tMax = arr[i];
}
}
console.log("最大值为:" + fMax);
console.log("次大值为:" + sMax);
console.log("第三大值为:" + tMax);