LeetCode - 2724.排序方式

学习 · 2023-10-16 · 64 人浏览
这一题考察排序的实现,最常见的就是冒泡,第一个学的也是冒泡..
这一题根据给定的数组和函数,返回一个排序后的数组,fn 会返回数字,它将决定排序后的数组的排序顺序。

要求

  1. 排序数组要根据fn返回的数组进行升序排序
  2. 不使用sort方法进行排序

快速排序题解

var sortBy = function(arr,fn){
  let len = arr.length
  //结束排序的条件
  if(len <= 1) return arr

  //取中间索引
  let minIndex = Math.floor(len / 2)
  //取中间数
  let mid = arr[minIndex]

  //取左右数组  用于每次的分组和排序
  let left = []
  let right = []

  for(let i = 0; i < len; i++){
    if(fn(arr[i]) === fn(mid)) continue  //中间基数直接跳过
    else if(fn(arr[i]) < fn(mid)) left.push(arr[i]) //小于基数放入左部分组
    else right.push(arr[i])
  }

  // 递归循环计算
  return sortBy(left,fn).concat([mid],sortBy(right,fn))
}

console.log(sortBy([[3, 4], [5, 2], [10, 1]],(x) => x[1]))

冒泡

var sortBy3 = function(arr, fn) {
  for(let i=0;i<arr.length-1;i++){
      for (let j=0;j<arr.length-i-1;j++){
      //取出排序后的结果 再进行交换
      if(fn(arr[j]) > fn(arr[j+1])){
          let temp= arr[j]
          arr[j]= arr[j+1]
          arr[j+1]=temp
      }}
  }
  return arr
};
Leetcode 排序实现
Theme Jasmine by Kent Liao