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之dhDataGrid Ver2.0.0代码
Jul 01 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
jquery动态加载js三种方法实例
Aug 03 Javascript
js字符串转成JSON
Nov 07 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
jquery checkbox的相关操作总结
Oct 17 Javascript
Javascript 实现放大镜效果实例详解
Dec 03 Javascript
JavaScript中in和hasOwnProperty区别详解
Aug 04 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP中的session安全吗?
2016/01/22 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
Python 多线程实例详解
2017/03/25 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python程序输出无内容的解决方式
2020/04/09 Python
python 6行代码制作月历生成器
2020/09/18 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
测绘工程个人的自我评价
2013/11/10 职场文书
门面房租房协议书
2014/08/20 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
青年文明号申报材料
2014/12/23 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js