希尔排序(插排改造优化)
function insertionSort4Gap(arr, gap) {
var len = arr.length;
gap = typeof gap === 'number' && gap > 0 ? gap : 1;
// for(let i = gap;
i < len;
i += gap) {
for(let i = gap;
i < len;
i++) {
var cur = arr[i];
var j = i - gap;
while(j >= 0 && arr[j] > cur) {// 这一步,由于 gap 变大(再由大递减),节约时间
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = cur;
}return arr;
}
function shellSort(arr) {
var len = arr.length;
var gap = 1;
while(gap < len / 3) {
gap = gap * 3 + 1;
}
for(gap;
gap > 0;
gap = Math.floor(gap / 3)) {
insertionSort4Gap(arr, gap);
}return arr;
}console.log(new Date().getTime());
shellSort(arr);
console.log(new Date().getTime());
console.log(arr);
文章图片
Sorting_shellsort_anim.gif
var arr = [4321, 34, 5643, 4321, 654, 2, 4389, 34, 564, 389, 3, 10, 23, 34, 89, 10, 2, 543, 4813, 89324, 765, 3, 2, 2, 4321, 34, 5643, 4321, 654, 2, 4389, 34, 564, 389, 3, 10, 23, 34, 89, 10, 2, 543, 4813, 89324, 765, 3, 2, 2, 4321, 34, 5643, 4321, 654, 2, 4389, 34, 564, 389, 3, 10, 23, 34, 89, 10, 2, 543, 4813, 89324, 765, 3, 2, 2];
console.log(new Date().getTime());
insertionSort(arr);
console.log(new Date().getTime());
推荐阅读
- 一个选择排序算法
- 排序(归并排序)
- 【图解】9张图彻底搞懂堆排序
- vue|vue 上移 下移 删除 排序
- 必须掌握的八种基本排序算法
- 【排序】插入排序算法
- 排序之冒泡和选择
- 2019-03-02|2019-03-02 排序
- Java数据结构与算法(十)排序算法01
- 不为人知的排序和筛选用法