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 相关文章推荐
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
Oct 16 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
js replace替换字符串同时替换多个方法
Nov 27 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
微信小程序使用车牌号输入法的示例代码
Aug 20 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 Javascript
vue中如何添加百度统计代码
Dec 19 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中mysql_field_type()函数用法
2014/11/24 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
浅析vue-router原理
2018/10/19 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
详解Python中expandtabs()方法的使用
2015/05/18 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python 类的继承实例详解
2017/03/25 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
初中政治教学反思
2014/01/17 职场文书
文明风采获奖感言
2014/02/18 职场文书
新任教师自我鉴定
2014/02/24 职场文书
老干部工作先进事迹
2014/08/17 职场文书
党课培训心得体会
2014/09/02 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
校运会通讯稿
2015/07/18 职场文书