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 相关文章推荐
浅析jQuery1.8的几个小变化
Dec 10 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
js逆向解密之网络爬虫
May 30 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
Sep 25 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
Javascript中async与await的捕捉错误详解
Mar 03 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在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
详解javascript函数的参数
2015/11/10 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python实现换位加密算法的示例
2018/10/14 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
浅析Python 序列化与反序列化
2020/08/05 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
毕业生自荐书
2014/02/03 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
外国人聘用意向书
2014/04/01 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
碧霞祠导游词
2015/02/09 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书