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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
ExtJS 2.0 实用简明教程之布局概述
Apr 29 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
JQuery表单验证插件EasyValidator用法分析
Nov 15 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
jQuery学习笔记之Ajax用法实例详解
Dec 01 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
小学教师听课制度
2014/02/01 职场文书
爱护草坪标语
2014/06/24 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
Python torch.flatten()函数案例详解
2021/08/30 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL