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中add实现同时选择两个id对象
Oct 22 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
Jan 24 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 Javascript
jQuery实现字体颜色渐变效果的方法
Mar 29 jQuery
vue-router的钩子函数用法实例分析
Oct 26 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php类常量的使用详解
2013/06/08 PHP
php中动态变量用法实例
2015/06/10 PHP
Smarty模板配置实例简析
2019/07/20 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
深入理解Node module模块
2018/03/26 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python中__slots__用法实例
2015/06/04 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
使用python制作一个解压缩软件
2019/11/13 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
django rest framework使用django-filter用法
2020/07/15 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
异步传递消息系统的作用
2016/05/01 面试题
企业文化演讲稿
2014/05/20 职场文书
解放思想演讲稿
2014/09/11 职场文书
个人收入证明模板
2014/09/18 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL