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模拟多线程
Feb 07 Javascript
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
javascript实现拖放效果
Dec 16 Javascript
js时间戳转为日期格式的方法
Dec 28 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
Vue 实现展开折叠效果的示例代码
Aug 27 Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 Javascript
JS eval代码快速解密实例解析
Apr 23 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(3)
2006/10/09 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
js实现简单模态框实例
2018/11/16 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python字典多条件排序方法实例
2014/06/30 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
python发送邮件脚本
2018/05/22 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
python实现人民币大写转换
2018/06/20 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
仓库理货员岗位职责
2013/12/18 职场文书
施工安全生产承诺书
2014/05/23 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
七一晚会主持词
2015/06/29 职场文书
工作服管理制度范本
2015/08/06 职场文书
导游词之峨眉山
2019/12/16 职场文书