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 相关文章推荐
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
深入浅析react native es6语法
Dec 09 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
js实现简单数字变动效果
Nov 06 Javascript
在react中使用vue的状态管理的方法示例
May 02 Javascript
vue 子组件修改data或调用操作
Aug 07 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
如何动态加载外部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中使用模板的方法
2008/05/24 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
JavaScript版代码高亮
2006/06/26 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
浅谈js中的闭包
2015/03/16 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
js评分组件使用详解
2017/06/06 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python实现简单登录验证
2016/04/13 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
大学学年自我鉴定
2013/10/28 职场文书
采购部岗位职责
2013/11/24 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
文明单位创建材料
2014/12/24 职场文书
清洁员岗位职责
2015/02/15 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python