题解 | #排序#

排序

https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896

简洁版本快排

/**
 * 快排
 */
function MySort( arr ) {
    // write code here
    quickSort(arr, 0, arr.length - 1)
    return arr
}
function quickSort(arr, l, r) {
    if (l >= r) return
    const pivot = arr[l]
    let i = l + 1
    let x = l
    let y = r
    while(i <= y) {
        if(arr[i] <= pivot) swap(arr, i++, x++)
        else swap(arr, i, y--)
    }
    quickSort(arr, l, x - 1)
    quickSort(arr, x + 1, r)
}
function swap(arr, i, j) {
    const temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
module.exports = {
    MySort : MySort
};

归并排序


/**
 归并排序
 */
function MySort( arr ) {
    // write code here
    return mergeSort(arr, 0, arr.length - 1)
}
function mergeSort(arr, l, r) {
    if (l === r) return [arr[l]]
    const mid = l + ((r - l) >> 1)
    const left = mergeSort(arr, l, mid)
    const right = mergeSort(arr, mid + 1, r)
    return merge(left, right)
}
function merge(arr1, arr2) {
    const len1 = arr1.length
    const len2 = arr2.length
    const res = []
    let i = 0
    let j = 0
    while(i < len1 && j < len2) {
        if (arr1[i] <= arr2[j]) res.push(arr1[i++])
        else res.push(arr2[j++])
    }
    while(i < len1) res.push(arr1[i++])
    while(j < len2) res.push(arr2[j++])
    return res
}
module.exports = {
    MySort : MySort
};

全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
xdm怎么说&nbsp;要被拷打了&nbsp;担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务