这一题考察排序的实现,最常见的就是冒泡,第一个学的也是冒泡..
这一题根据给定的数组和函数,返回一个排序后的数组,fn
会返回数字,它将决定排序后的数组的排序顺序。
要求
- 排序数组要根据
fn
返回的数组进行升序排序 - 不使用
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
};