vlambda博客
学习文章列表

经典的算法之插入排序,你会了吗

介绍了经典的算法之一,算法作为程序员的基础知识,应该做到每日一练,
对于前端工程师来说,算法接触的场景似乎并不多,但是算法是计算科学领域最重要的基石之一,所以作为搬砖人,不能冷落算法的存在。今天分享的是--插入排序--

一. 插入排序

实现:任给一个有顺序的数组,可以将一个数字有顺序的插入到该数组中。

分析:找出数组中第一个元素(该元素是比要插入的数字大),然后使用splice方法将这个数字插入到数组中。

代码:

let arr = [2, 4, 7, 9, 10]let x = 3let b = arr.find(a => a > x) //find() : 查找arr数组中第一个比x大的数字if (b === undefined) { //表示arr数组都比x小 arr.push(x)} else { let idx = arr.indexOf(b) arr.splice(idx, 0, x) //splice(从哪个索引开始,删除几个,插入的参数1,插入的参数2) }
console.log(arr)

下面对代码进行优化:

let arr = [2, 4, 7, 9, 10]let x = 6let b = arr.find(a => a > x) //find() : 查找arr数组中第一个比x大的数字let idx = arr.indexOf(b) //idnexOf() : 如果参数是undefined,则返回 -1 arr.splice(idx === -1 ? arr.length : idx, 0, x)console.log(arr)

下面用函数进行封装:

1.分析:
初始化一个变量,指向数组中的最后一个元素,将要###插入的数字与最后一个元素进行比较,如果数组中最后的那个元###素比要插入的数字大,则数组中的该元素向后移动一个位置,然###后将要插入的元素放入这个空位置。

2.图示分析:









按照上面的步骤,循环下去,直到要插入的数字大于数组中要比较的数字。

代码:

function insert(arr, x) { //p指向需要比较的元素 //p+1 指向空位 //原理 : 将要插入的数字从数组的最后一个数字开始比较, // 如果要插入的数字小于数组中的数字,则数组中的这个数字向后移动一个位置 let p = arr.length - 1 while (p >= 0 && arr[p] > x) { arr[p + 1] = arr[p] p-- } arr[p + 1] = x}
let arr = [2, 4, 5, 7, 8]insert(arr, 2)console.log(arr)