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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
风吟的小型JavaScirpt库 (FY.JS).
Mar 09 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
Feb 20 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
Vue render深入开发讲解
Apr 13 Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 Javascript
vue 动态添加class,三个以上的条件做判断方式
Nov 02 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
3
2006/10/09 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
JavaScript实现短信倒计时60s
2017/10/09 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
javascript实现评分功能
2020/06/24 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python 专题四 文件基础知识
2017/03/20 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
联谊会开场白
2015/06/01 职场文书
赢在中国观后感
2015/06/02 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers