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 相关文章推荐
document.all还是document.getElementsByName?
Jul 21 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
layui表格数据重载
Jul 27 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
JavaScript异步操作中串行和并行
Nov 20 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 和 MySQL 基础教程(四)
2006/10/09 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
js opener的使用详解
2014/01/11 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
餐厅采购员岗位职责
2014/03/06 职场文书
学术会议主持词
2014/03/17 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
滞留工资返还协议书
2014/10/19 职场文书
入党介绍人意见范文
2015/06/01 职场文书
《藏戏》教学反思
2016/02/23 职场文书
决心书格式及范文
2019/06/24 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
Java字符串逆序方法详情
2022/03/21 Java/Android