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 新建的元素事件绑定问题解决方案
Jun 12 Javascript
jquery文档操作wrap()方法实例简述
Jan 10 Javascript
js创建对象的方式总结
Jan 10 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
JavaScript模块化开发之SeaJS
Dec 13 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
Aug 10 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
jQuery中的siblings()是什么意思(推荐)
Dec 29 Javascript
深入探究AngularJs之$scope对象(作用域)
Jul 20 Javascript
vue axios基于常见业务场景的二次封装的实现
Sep 21 Javascript
微信小程序 简易计算器实现代码实例
Sep 02 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
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
会计专业应届生求职信
2013/11/24 职场文书
怎样写好自我鉴定
2013/12/04 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
计算机求职信
2014/07/02 职场文书
机电一体化专业求职信
2014/07/22 职场文书
优秀团员个人总结
2015/02/26 职场文书
办公用品管理制度
2015/08/04 职场文书
《检阅》教学反思
2016/02/22 职场文书
入党申请书怎么写?
2019/06/21 职场文书