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 相关文章推荐
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
页面图片浮动左右滑动效果的简单实现案例
Feb 10 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
Jul 22 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
js微信支付实现代码
Dec 22 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
加快Vue项目的开发速度的方法
Dec 12 Javascript
原生JS封装vue Tab切换效果
Apr 28 Vue.js
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
使用PHP编写发红包程序
2015/07/22 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
大学理论知识学习自我鉴定
2014/04/28 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
2019个人半年工作总结
2019/06/21 职场文书