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 相关文章推荐
jQuery DOM操作实例
Mar 05 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
Aug 10 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
Sep 26 Javascript
小程序转发探索示例
Feb 19 Javascript
js中Function引用类型常见有用的方法和属性详解
Dec 11 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
Oct 28 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
转换中文日期的PHP程序
2006/10/09 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
新闻内页-JS分页
2006/06/07 Javascript
用js生产批量批处理执行命令
2008/07/28 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
详解python itertools功能
2020/02/07 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Python持续监听文件变化代码实例
2020/07/22 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
幼儿园门卫岗位职责
2014/02/14 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
学校运动会简讯
2015/07/20 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL