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 相关文章推荐
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
Jul 01 Javascript
javascript中的try catch异常捕获机制用法分析
Dec 14 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
分享一个精简的vue.js 图片lazyload插件实例
Mar 13 Javascript
bootstrap datepicker插件默认英文修改为中文
Jul 28 Javascript
简单实现js进度条加载效果
Mar 25 Javascript
JavaScript 下载svg图片为png格式
Jun 21 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 13 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
PHP 简单数组排序实现代码
2009/08/05 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
web 页面分页打印的实现
2009/06/22 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
layui 表单标签的校验方法
2019/09/04 Javascript
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
应届毕业生自我评价分享
2013/12/15 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
法语专业求职信
2014/07/20 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
利用ajax+php实现商品价格计算
2021/03/31 PHP
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技