lynhao / day-by-day

每日更新一道算法题
MIT License
0 stars 0 forks source link

排序算法衍生2 #5

Open lynhao opened 5 years ago

lynhao commented 5 years ago

题目: 在未排序数组中找到第k个最大元素 (请注意: 你需要找的是数组排序后第k个最大的元素,而不是第k个不同的元素)

eg: [3,2,1,6,4] k = 2 output: 4

lynhao commented 5 years ago

解题一:

function maxKValue(arr, k) {
  return arr.sort((a, b) => b -a)[k-1]
}
lynhao commented 5 years ago

利用冒泡排序原理, 不需要将所有数据遍历一次,只要冒泡k次即可

解题二:

function maxKValue(arr, k) {
  let len = arr.length - 1
  for (let i = len, temp; i > len - k; i--) {
    for (let j = 0; j < i; j++){
      if (arr[j] > arr[j+1]) {
       temp = arr[j]
       arr[j] = arr[j+1]
       arr[j+1] = temp
      } 
    } 
  }
  return arr[len - (k -1)]
}