递归实现快速排序

171 阅读1分钟

前端javascript,使用递归的方式实现快速排序算法。

思想是,通过中间下标分成前后两部分,用中间值作为分界线,数组中除中间值外的数据,小于中间值的数据放到before数组,大于中间值的数据放到after数组,一直递归分割before数组和after数组,直到最后before数组和after数组只剩下一个值,最终返回的数据,就是排序后的数据。

const a=[23,56,98,93,1,32]
function sortArray(arr){
    if(arr.length<=1) return arr  // 如果只剩下一个数据,返回
    const middleIndex=Math.floor(arr.length/2) // 中间下标值
    const before=[]
    const after=[]
    const middle=arr[middleIndex]  // 中间值
    arr.forEach((item,index) =>{
        if(index!==middleIndex){  // 排除中间值
            item < middle ? before.push(item): after.push(item)
        }
    })
    return sortArray(before).concat(middle,sortArray(after))  // 递归排序before和after数组
}
console.log(sortArray(a))
// 最终打印
// [1,23,32,56,93,98]