题解 | #排序#
排序
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后进行一次插入排序即可完成
