经典的算法之插入排序,你会了吗
介绍了经典的算法之一,算法作为程序员的基础知识,应该做到每日一练,
对于前端工程师来说,算法接触的场景似乎并不多,但是算法是计算科学领域最重要
的基石之一,所以作为搬砖人,不能冷落算法的存在。今天分享的是--插入排序--
一. 插入排序
实现:任给一个有顺序的数组,可以将一个数字有顺序的插入到该数组中。
分析:找出数组中第一个元素(该元素是比要插入的数字大),然后使用splice方法将这个数字插入到数组中。
代码:
let arr = [2, 4, 7, 9, 10]
let x = 3
let 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 = 6
let 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)