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 相关文章推荐
JavaScript小技巧 2.5 则
Sep 12 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
js操作数组函数实例小结
Dec 10 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
jquery实现拖动效果
Aug 10 Javascript
js实现简单的获取验证码按钮效果
Mar 03 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 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读注册表
2006/10/09 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
小程序自定义日历效果
2018/12/29 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
fastadmin中调用js的方法
2019/05/14 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python中str内置函数用法总结
2020/12/27 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
2014年五四青年节活动策划书
2014/04/22 职场文书
普通党员对照检查材料
2014/08/28 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
英文慰问信范文
2015/03/24 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server