为了账号安全,请及时绑定邮箱和手机立即绑定

数组排序问题

数组排序问题

PHP
江户川乱折腾 2019-03-15 19:25:25
对一个已知数组array('1','3','100','5','99','2'); 数组个数为1000000000;里面值是无序的,进行排序,找出第二大的数。要求:用时最少的排序算法。 语言不限。 指导指导。
查看完整描述

6 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

就用冒泡排序不就ok了。你百度一下js的冒泡排序

查看完整回答
反对 回复 2019-03-18
?
慕沐林林

TA贡献2016条经验 获得超9个赞

如果只是要找出第二大的数,根本不需要排序啊。O(N) 啊~

查看完整回答
反对 回复 2019-03-18
?
莫回无

TA贡献1865条经验 获得超7个赞

你要找出第二大的数字,只需要维护最大值和第二大的值即可,对数组进行遍历,遍历一次就可以得到这两个值,这个操作的时间复杂度就是O(N).

查看完整回答
反对 回复 2019-03-18
?
米脂

TA贡献1836条经验 获得超3个赞

如果不用原生排序的话,可以用快排,至于最快也没办法直接肯定,快排还是存在不稳定因素

function qSort(list) {
    if (list.length == 0) {
        return [];
    }
    var lesser = [];
    var greater = [];
    var pivot = list[0];
    for (var i = 1; i < list.length; i++) {
        if (list[i] < pivot) {
            lesser.push(list[i]);
        } else {
            greater.push(list[i]);
        }
    }
    return qSort(lesser).concat(pivot, qSort(greater));
}
查看完整回答
反对 回复 2019-03-18
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

function findTheSecondLargestNumber(arr) {
  if (arr.length < 2) {
    throw 'the number of the array is less than 2'
  }

  let largestNum = -Infinity, secondLargestNum = -Infinity;

  arr.forEach(item => {
    if (item > largestNum) {
      [largestNum, secondLargestNum] = [item, largestNum]
    } else if (item > secondLargestNum) {
      secondLargestNum = item;
    }
  })

  return secondLargestNum
}


console.log(findTheSecondLargestNumber(['1','3','100','5','99','2']))
console.log(findTheSecondLargestNumber([]))

维护最大值和次大值即可

查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 424 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信