题解 | #排序# #希尔排序

排序

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

希尔排序

/** 
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @return int整型一维数组
 */
export function MySort(arr: number[]): number[] {
    // write code here
    // 希尔排序
    let interval = 1
    const len = arr.length
     
    // 优化循环次数
    while(interval < len / 3){
        interval = 3 * interval + 1
    }
     
    // 先初次检查数组是否有序
    let hasExchanges = false
    for(let i = 0; i < len - 1; i++){
        if(arr[i] > arr[i+1]){
            [arr[i], arr[i+1]] = [arr[i+1], arr[i]]
            hasExchanges = true
        }
    }
     
    // 有序则退出
    if(!hasExchanges) {return arr}
     
     
    while(interval >= 1){
        // 插入排序
        for(let i = interval; i < len; i++){
            let curr = arr[i]
            let prevIdx = i - interval
            while(prevIdx >= 0 && curr < arr[prevIdx]){
                arr[prevIdx + interval] = arr[prevIdx]
                prevIdx -= interval
            }
            arr[prevIdx + interval] = curr
        }
        interval = ((interval / 3) * 2) >> 1
    }
         
     
    return arr
}
全部评论

相关推荐

04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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