JS折半插入排序算法实例


Posted in Javascript onDecember 02, 2015

本文实例讲述了JS折半插入排序算法。分享给大家供大家参考,具体如下:

function pushArrayWithIndex(arr, index, value) { // 将元素添加到数组的指定位置
  var temArr = arr.slice(0, index);
  temArr.push(value);
  return temArr.concat(arr.slice(index));
}
/* test for pushArrayWithIndex
var arr = [1, 2, 3, 4, 5];
arr = pushArrayWithIndex(arr, 1, 9);
console.log(arr);*/
function sortInsert(arr) { // 插入排序
  var temArr = []; // 临时数组,存储已排序项
  function getSortTmpIndex(subArr, num) {
    var len = subArr.length;
    if(0 == len) return 0; // 当数组为空时,返回最开始位置
    var cpmIndex = Math.ceil(len / 2); // 计算中间元素所在位置
    if(cpmIndex > len - 1) cpmIndex = len - 1;
    if(num == subArr[cpmIndex]) { // 相等时直接返回
      return cpmIndex;
    }
    if(num > subArr[cpmIndex]) { // 向后折半查找
      cpmIndex++;
      return cpmIndex + getSortTmpIndex(subArr.slice(cpmIndex), num);
    }
    if(num < subArr[cpmIndex]) { // 向前折半查找
      return getSortTmpIndex(subArr.slice(0, cpmIndex), num);
    }
  }
  for (var i in arr) {
    var index = getSortTmpIndex(temArr, arr[i]); // 查找arr[i]在temArr中的位置
    console.log('index:', index, ' num:', arr[i], ' arr:', temArr);
    temArr = pushArrayWithIndex(temArr, index, arr[i]); // 将元素插入到查找位置
  }
  return temArr;
}
var arr = [3, 7, 6, 5, 9, 1, 2, 3, 1, 7, 4];
console.log(arr);
arr = sortInsert(arr);
console.log(arr);

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
用js实现预览待上传的本地图片
Mar 15 Javascript
JavaScript 三种创建对象的方法
Oct 16 Javascript
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
js数组常用最重要的方法
Feb 04 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
Apr 18 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 Javascript
如何动态加载外部Javascript文件
Dec 02 #Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 #Javascript
JavaScript如何禁止Backspace键
Dec 02 #Javascript
js文本框输入内容智能提示效果
Dec 02 #Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
Dec 02 #Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 #Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 #Javascript
You might like
php array_flip() 删除数组重复元素
2009/01/14 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
学习python (1)
2006/10/31 Python
跟老齐学Python之dict()的操作方法
2014/09/24 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
幼儿园家长寄语
2014/04/02 职场文书
测量员岗位职责
2015/02/14 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA