直接插入排序

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

1. 基本思想

把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行比较,将他插入到有序表的适当位置,使之成为新的有序表。

2. 算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

3. 实现逻辑

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2-5

4.动图演示

5.代码实现

function insertSort(arr){let length = arr.length;//从第一个位置开始获取数据,插入向有序序列for(let i = 1;i<length;i++){//获取i位置的元素,和前面的数据依次进行比较let tmp = arr[i];let j = i;while(arr[j-1] > tmp && j>0){arr[j] = arr[j-1];j--;}//将j位置的数据插入到tmparr[j] = tmp;}return arr
}
let arr = [6,0,3,9,8,2,1,5,4,7];
console.log(insertSort(arr));

JS实现直接插入排序相关推荐

  1. 十大排序总结(js实现、稳定性、内外部排序区别、时间空间复杂度、冒泡、快速、直接选择、堆、直接插入、希尔、桶、基数、归并、计数排序)

    目录 排序相关概念 稳定性 内部排序 外部排序 十种排序算法特点总结 交换排序 冒泡排序(数组sort方法的原理) 图解 js实现 特点 快速排序 图解 js实现 特点 选择排序 直接选择排序 图解 ...

  2. js数组排序的六种方法

    1. sort()排序 sort() 方法用于对数组的元素进行排序. 排序顺序可以是字母或数字,并按升序或降序.默认排序顺序为按字母升序. 注意: 当数字是按字母顺序排列时"40" ...

  3. js排序的时间复杂度_JavaScript插入排序算法通俗说明

    插入排序概述 插入排序是将数组分为待排序和已排序两个区间.依次从待排序区间中取出一项,用该项跟已排序区间项逐个对比,通过位移来实现插入到对应位置的排序方式.插入排序平均时间复杂度是:O(n^2) 步骤 ...

  4. 关于js数组的六种算法---水桶排序,冒泡排序,选择排序,快速排序,插入排序,希尔排序的理解。...

    1.水桶排序: 原理:首先找到arr这个数组中的最大项 max(此处为88),然后创建一个新的数组bucket,bucket数组长度为max,然后for循环遍历,在bucket的索引为arr[i]的添 ...

  5. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  6. JS排序算法之插入排序

    插入排序--玩扑克牌的算法. 如果站在我后面的你,大于我,你就站在我的位置上,把你的位置让给你后面的牌,后面的也一样做,直到空出一个位置,这个位置给我插入. 1 var group= [1,9,3,5 ...

  7. 算法 --- 冒泡排序、选择排序、插入排序的js实现

    冒泡排序: function bubbleSort(arr){let i = arr.length;while(i >0){for(let j = 0; j< i; j++) {let p ...

  8. 算法 --- 插入排序的JS实现

    let A = [5, 2, 4, 6, 1 ,3];// 插入排序 insertionSort = (A) => {console.log("原数组>>>" ...

  9. JS数据结构与算法——插入排序

    一.图解排序过程 二.代码实现 三.完整代码 <!DOCTYPE html> <html lang="en"> <head><meta c ...

最新文章

  1. android的五大布局(layout)
  2. 修改sqlarchemy源码使其支持jdbc连接mysql
  3. Docker 下安装 Spark
  4. logrotate 进行nginx日志分割
  5. Windows下简单好用的php平台:XAMPP Wamp5和AppServ
  6. FFMPEG系列课程(一)打开视频解码器
  7. 个人博客作业-week5-敏捷开发方法读后感
  8. 向服务器上传本地大文件的方法xshell
  9. 学习面向对象的第一天,感觉还好啦
  10. c语言读一字节程序,C语言读写二进制文件
  11. 为什么需要交叉编译器
  12. MySQL窗口函数OVER()
  13. Google Chrome for mac(谷歌浏览器)
  14. python小作业8代码(列表的遍历与嵌套)
  15. java中repeat什么意思_rep在音响上什么意思-功放上repeat-功放机repeat
  16. 翻译接口java_微软翻译api的java实现
  17. c语言机票座位预定系统_飞机票系统设计(C语言版)
  18. PHP开发入门-论坛发贴
  19. 使用过程中蓝牙驱动突然消失
  20. Flowable文档大全

热门文章

  1. 小米手机不亮屏显示时间日期?方法其实很简单,升级MIUI11有惊喜
  2. Win7使用Win7codecs导致资源管理器重启的解决办法
  3. 微信小程序调整头像和昵称获取规则后,开发者该怎样应对?
  4. lol最克制诺手的英雄_《英雄联盟》中什么英雄最克制诺克萨斯之手?
  5. 最有创意的店名[搞笑]
  6. java清除referer_Java实现跳过网站Referer校验
  7. 服务器虚拟机挂载光驱,如何在VMware vSphere client中安装光驱的方法步骤(图文教程)...
  8. web初探-JavaScript-JavaScript 对象
  9. 基因数据处理122之SSW和SparkSW评分不一致,query为Q9
  10. SQL案例分析-地铁换乘线路查询.sql