题解 | #排序#

排序

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @return int整型一维数组
 */
function MySort(arr) {
    // write code here
    // 利用希尔排序,时间复杂度为O(n^3/2)
    let len = arr.length;
    for (let d = parseInt(len / 2); d >= 1; d = parseInt(d / 2)) {
        // 每一个分组内部利用插入排序
        for (let i = d; i < len; i++) {
            for (let j = i; j >= 1; j--) {
                if (arr[j] < arr[j - d]) {
                    let temp = arr[j];
                    arr[j] = arr[j - d];
                    arr[j - d] = temp;
                }
            }
        }
    }
    return arr;
}
module.exports = {
    MySort: MySort,
};

解题思路

希尔排序时间复杂度为O(n^3/2)

希尔排序按照规定的某一个增值d(通常为待排数组的length/2),将待排序数组进行分组,然后对组内元素利用插入排序进行排序;

减少增值d(通常取上次d值的1/2),继续分组排序;

直到d值减为1后进行一次插入排序即可完成

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务