面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
排序
有哪些经典排序?
冒泡排序原理?
- 比较相邻的两个元素。如果第一个比第二个大,则交换位置;
- 对每一对相邻元素重复第一个步骤,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
快速排序原理?
- 选择一个参考元素,将列表分割成两个子序列;
- 对列表重新排序,将所有小于基准值的元素放在基准值前面,所有大于基准值的元素放在基准值的后面;
- 分别对较小元素的子序列和较大元素的子序列重复步骤1和2
手写冒泡排序?
/**
* 外循环控制需要比较的元素,比如第一次排序后,
最后一个元素就不需要比较了,内循环则负责两两元素比较,将元素放到正确位置上
function bubbleSort(arr) {
const len = arr.length
for(let i=0; i<len; i++) {
for(let j=0;j<len-1-i; j++) {
// 注意边界值
if(arr[j] > arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]] // 交换位置
}
}
}
return arr
}
console.log(bubbleSort([3,44,15,36,26,27,2,46,4,19,50,48]))
//[2,3,4,15,19,26,27,36,44,46,48,50]
手写快速排序?
function quickSort(arr) {
if(arr.length<=1) return arr
const left = [],right = [],current = arr.splice(0,1)
for(let i=0; i<arr.length; i++) {
if(arr[i]<current) {
// 小于参考值放左边
left.push(arr[i])
}else{
// 否则放右边
right.push(arr[i])
}
}
//递归上述步骤
return quickSort(left).concat(current,quickSort(right))
}
console.log(quickSort([3,44,15,36,26,27,2,46,4,19,50,48]))
//[2, 3, 4, 15, 19, 26, 27, 36, 44, 46, 48, 50]