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 相关文章推荐
两种方法实现文本框输入内容提示消失
Mar 17 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
Javascript定义类(class)的三种方法详解
Mar 13 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
Nov 28 Javascript
webpack分离css单独打包的方法
Jun 12 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
如何动态加载外部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自带方法验证邮箱是否存在
2016/02/01 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
超级退弹代码
2008/07/07 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
使用Python读取大文件的方法
2018/02/11 Python
Numpy中的mask的使用
2018/07/21 Python
值得收藏的10道python 面试题
2019/04/15 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
零基础学python应该从哪里入手
2020/08/11 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
中国电视购物:快乐购
2017/02/04 全球购物
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
MySQL面试题
2014/01/12 面试题
点菜员岗位职责范本
2014/02/14 职场文书
优秀求职信
2014/05/29 职场文书
Python如何加载模型并查看网络
2022/07/15 Python