概述
JS六座大山:
- 堆栈内存和闭包作用域
- 面向对象oop程序设计:深浅拷贝
- 同步异步编程及浏览器渲染机制:渲染机制、同步异步、CRP、微任务宏任务
- DOM事件和设计模式
- ES6核心知识和源码分析:
- AJAX/http前后端数据通信:跨域、性能优化、、
进阶:
- 数据结构与算法:排序、去重
- H5响应式布局
- Canvas和数据可视化
- 正则表达式深入剖析
- 企业OA办公系统
阶段二:
webpack工程化开发
Vue2.0
Vue生态进阶
Vue实战和性能优化
Vue3.0基础和实战
React基础、核心、生态、实战、性能
小程序
Node、express
Flutter
算法:时间复杂度
O(1)<O(logn)<O(n)<O(n^2)····<O(2^n)
算法:主要基于数组的去重和排序;
排序:冒泡、插入、快速(好)
冒泡排序(O(n^2)):前一个跟后一个比大小,一轮过后最大的排到最后去;
- 比较arr.length-1次;
- 每次比较arr.length-1-i次
- 交换两值:第三方变量temp、数组解构赋值
[a,b]=[b,a]
、a=a+b;b=a-b;a=a-b;
// 按索引交换两值
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
return arr;
}
// 冒泡排序
Array.prototype.bubble = function bubble() {
let _this = this,
flag = false;
for (let i = 0; i < _this.length - 1; i++) {
for (let j = 0; j < _this.length - 1 - i; j++) {
if (_this[j] > _this[j + 1]) {
swap(_this, j, j + 1);
flag = true;
}
}
if(!flag)break;//本次没有交换,就退出外层for循环
flag=false;//本轮有交换,flag=true,所以回到默认值false,检测下次
}
return _this;
};
let arr = [2, 3, 6, 1, 7];
arr.bubble();
console.log(arr);//[1,2,3,6,7]
插入排序(O(n^2)):(返回新数组)(先拿出一张牌)抽取第一个数,构成新数组,剩下其他的挨个跟这个数组中数据比较,大于谁就放在谁后面;
Array.prototype.insert = function insert() {
// 先取出一张牌放到手里
let _this = this,
hanlde = [];
hanlde.push(_this[0]);
// 开始抓牌
for (let i = 1; i < _this.length; i++) {
// A每一次新抓的牌
let A = _this[i];
// 和手里的牌进行比较(倒着比较)
for (let j = hanlde.length - 1; j >= 0; j--) {
// 要比较的手里这张牌
let B = hanlde[j];
// 新抓的牌A比B要大,则放在B的后面
if (A > B) {
hanlde.splice(j + 1, 0, A);
break; //=>没必要和手里的牌继续比较了
}
// 都比到最开始,A都没有比任何的牌大,则A是最小的,插入到开始
if (j === 0) {
hanlde.unshift(A);
}
}
}
return hanlde;
};
let arr = [12, 8, 24, 16, 1];
arr = arr.insert();
console.log(arr);
快速排序(O(n+logn)):**(返回新数组)**类似的有堆排序;从数组中间取值,然后将剩下的跟这个值比较,大于的放到左边新数组中,小于放到右边新数组中,左右两个数组递归这个方法,直到数据为一个,最后拼接数组,成新的数组;
Array.prototype.quick = function quick() {
let _this = this;
// 如果处理的数组只有一项或者空的,则无需处理了
if (_this.length <= 1) {
return _this;
}
// 获取中间项,并且把中间项在数组中删除
let middleIndex = Math.floor(_this.length / 2),
middleValue = _this.splice(middleIndex, 1)[0];
let arrLeft = [],
arrRight = [];
for (let i = 0; i < _this.length; i++) {
let item = _this[i];
item < middleValue ? arrLeft.push(item) : arrRight.push(item);
}
return quick.call(arrLeft).concat(middleValue, quick.call(arrRight));
};
let arr = [12, 34, 22, 54, 1];
arr = arr.quick();
console.log(arr);
最后
以上就是动听服饰为你收集整理的【JavaScript】JS排序算法-冒泡、插入、快速的全部内容,希望文章能够帮你解决【JavaScript】JS排序算法-冒泡、插入、快速所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复