课程名称:JavaScript版数据结构与算法
课程章节:第11章 进阶算法之“搜索排序”
主讲老师:lewis
课程内容:
今天学习的内容包括:
11-3 JavaScript 实现:选择排序——双层for循环处理即可。
11-4 JavaScript 实现:插入排序——通for循环,while进行插入排序。
课程收获:
选择排序
选择排序的思路
- 找到数组中的最小值,选中它并将其放置在第一位。
- 接着找到第二小的值,选中它并将其放置在第二位。
- 以此类推,执行
n-1
轮。
for (let j = 0; j < this.length - 1; j++) {
let tempIndex = j
const temp = this[j]
for (let i = j + 1; i < this.length - j; i++) {
if (this[i] < temp) {
tempIndex = i
}
}
this[j] = this[tempIndex]
this[tempIndex] = temp
}
内部for循环开始为从j+1
开始,这样就不会从j开始判断哪个是最小位从而提升算法时间复杂度。选择排序和冒泡排序一样性能比较差,所以基本不使用。
选择排序的时间复杂度
- 两个嵌套循环。
- 时间复杂度:O(n^2)。
插入排序
插入排序的思路
- 从第二个数开始往前比。
- 比它大就往后排。
- 以此类推进行到最后一个数。
for (let i = 1; i < this.length; i++) {
const temp = this[i]
let j = i
while (j>0){
if(this[j-1] > temp){
this[j] = this[j-1]
}else{
break
}
j--
}
this[j] = temp
}
插入排序的时间复杂度
- 两个嵌套循环。
- 时间复杂度:O(n^2)。
今天学习了 选择排序、插入排序,跟着老师的讲解和动画的演示,感觉排序算法好像也就是那么回事,还是很好理解的,我相信我也算是初窥算法大门了,还需继续学习提升,对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~