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

一个先递增后递减的数组,如何排序最简单

一个先递增后递减的数组,如何排序最简单

慕斯709654 2019-03-13 18:19:31
例如var arr = [1, 3, 6, 10, 2, 7, 9];排序后var arr = [1, 2, 3, 6, 7, 9, 10];!!!特别说明,我没写错!!! 不是你们以为的先递增后递减!!! 那些想当然还踩别人题目的 怕不是常规题做多了!!!!这是我出去面试的时候碰见的,那个人特地强调不是先增后减!!!!!!不能用sort方法 ,纯原生的方法写
查看完整描述

3 回答

?
料青山看我应如是

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

你的例子写错了吧,难道不应该是

var arr = [1, 3, 6, 10, 9, 7, 2];

这样的话,维护两个指针,一个从其往后,一个从后往前,谁小排谁,两个指针遇到了,就全排好了。


查看完整回答
反对 回复 2019-04-01
?
qq_笑_17

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

let arr = [1, 3, 6, 10, 9, 7, 2];

function trans (arr) {

  let i = 0

  let j = arr.length - 1

  let result = []

  while (i <= j) {

    if (arr[i] <= arr[j]) {

      result.push(arr[i++])

    } else {

      result.push(arr[j--])

    }

  }

  return result

}

trans(arr)


查看完整回答
反对 回复 2019-04-01
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果确定时先递增再递减的数组, 直接头尾合并 时间复杂度 o(n)


思路


let i=0

let j=arr.length-1

let newArr = []

if(arr[i]<arr[j]){

    newArr.push(arr[i++])

}else{

    newArr.push(arr[j--])

}

加个循环 一遍就能排好


查看完整回答
反对 回复 2019-04-01
  • 3 回答
  • 0 关注
  • 1013 浏览
慕课专栏
更多

添加回答

举报

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