JS实现直接插入排序
直接插入排序
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
1. 基本思想
把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行比较,将他插入到有序表的适当位置,使之成为新的有序表。
2. 算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
3. 实现逻辑
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤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实现直接插入排序相关推荐
- 十大排序总结(js实现、稳定性、内外部排序区别、时间空间复杂度、冒泡、快速、直接选择、堆、直接插入、希尔、桶、基数、归并、计数排序)
目录 排序相关概念 稳定性 内部排序 外部排序 十种排序算法特点总结 交换排序 冒泡排序(数组sort方法的原理) 图解 js实现 特点 快速排序 图解 js实现 特点 选择排序 直接选择排序 图解 ...
- js数组排序的六种方法
1. sort()排序 sort() 方法用于对数组的元素进行排序. 排序顺序可以是字母或数字,并按升序或降序.默认排序顺序为按字母升序. 注意: 当数字是按字母顺序排列时"40" ...
- js排序的时间复杂度_JavaScript插入排序算法通俗说明
插入排序概述 插入排序是将数组分为待排序和已排序两个区间.依次从待排序区间中取出一项,用该项跟已排序区间项逐个对比,通过位移来实现插入到对应位置的排序方式.插入排序平均时间复杂度是:O(n^2) 步骤 ...
- 关于js数组的六种算法---水桶排序,冒泡排序,选择排序,快速排序,插入排序,希尔排序的理解。...
1.水桶排序: 原理:首先找到arr这个数组中的最大项 max(此处为88),然后创建一个新的数组bucket,bucket数组长度为max,然后for循环遍历,在bucket的索引为arr[i]的添 ...
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
- JS排序算法之插入排序
插入排序--玩扑克牌的算法. 如果站在我后面的你,大于我,你就站在我的位置上,把你的位置让给你后面的牌,后面的也一样做,直到空出一个位置,这个位置给我插入. 1 var group= [1,9,3,5 ...
- 算法 --- 冒泡排序、选择排序、插入排序的js实现
冒泡排序: function bubbleSort(arr){let i = arr.length;while(i >0){for(let j = 0; j< i; j++) {let p ...
- 算法 --- 插入排序的JS实现
let A = [5, 2, 4, 6, 1 ,3];// 插入排序 insertionSort = (A) => {console.log("原数组>>>" ...
- JS数据结构与算法——插入排序
一.图解排序过程 二.代码实现 三.完整代码 <!DOCTYPE html> <html lang="en"> <head><meta c ...
最新文章
- android的五大布局(layout)
- 修改sqlarchemy源码使其支持jdbc连接mysql
- Docker 下安装 Spark
- logrotate 进行nginx日志分割
- Windows下简单好用的php平台:XAMPP Wamp5和AppServ
- FFMPEG系列课程(一)打开视频解码器
- 个人博客作业-week5-敏捷开发方法读后感
- 向服务器上传本地大文件的方法xshell
- 学习面向对象的第一天,感觉还好啦
- c语言读一字节程序,C语言读写二进制文件
- 为什么需要交叉编译器
- MySQL窗口函数OVER()
- Google Chrome for mac(谷歌浏览器)
- python小作业8代码(列表的遍历与嵌套)
- java中repeat什么意思_rep在音响上什么意思-功放上repeat-功放机repeat
- 翻译接口java_微软翻译api的java实现
- c语言机票座位预定系统_飞机票系统设计(C语言版)
- PHP开发入门-论坛发贴
- 使用过程中蓝牙驱动突然消失
- Flowable文档大全
热门文章
- 小米手机不亮屏显示时间日期?方法其实很简单,升级MIUI11有惊喜
- Win7使用Win7codecs导致资源管理器重启的解决办法
- 微信小程序调整头像和昵称获取规则后,开发者该怎样应对?
- lol最克制诺手的英雄_《英雄联盟》中什么英雄最克制诺克萨斯之手?
- 最有创意的店名[搞笑]
- java清除referer_Java实现跳过网站Referer校验
- 服务器虚拟机挂载光驱,如何在VMware vSphere client中安装光驱的方法步骤(图文教程)...
- web初探-JavaScript-JavaScript 对象
- 基因数据处理122之SSW和SparkSW评分不一致,query为Q9
- SQL案例分析-地铁换乘线路查询.sql