希尔排序算法
2016-05-09 20:33
274 查看
//希尔排序
function shellSort(array){
var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1];
// reverse()在维基上看到这个最优的步长较小数组
var i = 0;
var stepArrLength = stepArr.length;
var len = array.length;
var len2 = parseInt(len/2);
for(;i < stepArrLength; i++){
if(stepArr[i] > len2){
continue;
}
stepSort(stepArr[i]);
}
// 排序一个步长
function stepSort(step){
//console.log(step) 使用的步长统计
var i = 0, j = 0, f, tem, key;
var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;
for(;i < step; i++){// 依次循环列
for(j=1;/*j < stepLen && */step * j + i < len; j++){//依次循环每列的每行
tem = f = step * j + i;
key = array[f];
while((tem-=step) >= 0){// 依次向上查找
if(array[tem] > key){
array[tem+step] = array[tem];
}else{
break;
}
}
array[tem + step ] = key;
}
}
}
return array;
}
function shellSort(array){
var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1];
// reverse()在维基上看到这个最优的步长较小数组
var i = 0;
var stepArrLength = stepArr.length;
var len = array.length;
var len2 = parseInt(len/2);
for(;i < stepArrLength; i++){
if(stepArr[i] > len2){
continue;
}
stepSort(stepArr[i]);
}
// 排序一个步长
function stepSort(step){
//console.log(step) 使用的步长统计
var i = 0, j = 0, f, tem, key;
var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;
for(;i < step; i++){// 依次循环列
for(j=1;/*j < stepLen && */step * j + i < len; j++){//依次循环每列的每行
tem = f = step * j + i;
key = array[f];
while((tem-=step) >= 0){// 依次向上查找
if(array[tem] > key){
array[tem+step] = array[tem];
}else{
break;
}
}
array[tem + step ] = key;
}
}
}
return array;
}
相关文章推荐
- CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离
- 解决Linux下yum安装无法解析URL的问题
- 【连载】关系型数据库是如何工作的?(10) - 查询管理器之parser
- OC下载网页
- UVa 378 - Intersecting Lines
- Hadoop学习(四)— MapReduce入门
- php 字符串
- 哈工大深研院数字图像处理第二次大作业:水果自动识别(2)HSV空间聚类及SIFT算法目标识别
- HDU 4089 Activation 概率dp好题
- 【全排列】HDU1027Ignatius and the Princess II/HDU1716排列2
- Leetcode 198. House Robber
- Notification
- BOM—浏览器对象模型
- 30.丑数
- Connect 源码解析(一)
- codeforces_459D_(线段树,离散化,求逆序数)
- php 实现接收客户端上传的图片
- 哪里可以下载各种图标元件
- 5.9号错误代码备份
- Autorelease自动释放池的使用