金九银十,又到了跳槽季,赶紧复习下排序准备跳槽。下面整理了几种常见的排序算法。
选择排序
选择排序的原理是从数组中遍历出最小值,放进新数组中,然后再把原数组中的对应的值删除,最后得出一个从小到大的新数组
/**
* @description:
* @param {number []}
* @return {number []}
*/
//选择排序
function selectSort(arr){
let list=[...arr] //拷贝一份,不要对原数组进行操作
let newList=[] //返回的数组
while(list.length>0)
{
let min=list[0] //设置初始最小值
let minIndex //设置最小值的索引
list.forEach((el,index)=>{
if(el<min)
{
min=el
minIndex=index
}
})
newList.push(min)
list.splice(minIndex,1)
}
return newList
}
冒泡排序
冒泡排序其实就是对比相邻的两个元素,把大的值放在后面,这样一轮遍历之后,数组最后一个元素就是最大的值了,这样依次类推,循环n-1次后排序就已经完成了。
/**
* @description:
* @param {number []}
* @return {undefined}
*/
function sort(arr)
{
let len=arr.length-1
for(let i=0;i<len;i++)
{
for(let j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
[arr[j],arr[j+1]]=[arr[j+1],arr[j]]
}
}
}
}
快速排序
快速排序是通过二分法来进行排序的,效率比较高,主要就是先选择一个基准值,比这个 基准值大的放在右边,小的放在左边,利用递归继续进行重复拆分,直到数组拆分的长度只有1了就是排序完成,结束递归.
/**
* @description:
* @param {number []}
* @return {number []}
*/
function quickSort(arr)
{
if(arr.length<2)
{
return arr
}
let mid=arr.splice(0,1)[0]
let low=[]
let high=[]
let len=arr.length
for(let i=0;i<len;i++)
{
if(arr[i]<=mid)
{
low.push(arr[i])
}
else{
high.push(arr[i])
}
}
console.log(low,mid,high)
return quickSort(low).concat([mid]).concat(quickSort(high))
}