贵州省住房和建设厅网网站,阿里云域名注册入口官网,广州网站建设工程,网站建设市场需求分析数据结构#xff08;六#xff09;一、大O表示法二、冒泡排序三、选择排序一、大O表示法 
在计算机中采用粗略的度量来描述计算机算法的效率#xff0c;这种方法被称为“大O”表示法。 我们判断一个算法的效率#xff0c;不能只凭着算法运行的速度#xff0c;因为随着数据…
数据结构六一、大O表示法二、冒泡排序三、选择排序一、大O表示法 
在计算机中采用粗略的度量来描述计算机算法的效率这种方法被称为“大O”表示法。 我们判断一个算法的效率不能只凭着算法运行的速度因为随着数据量的变化算法的速度会发生变化所以我们应该 
根据算法的速度随着数据量的变化会如何变化这样的方式来表示算法的效率大O表示法就是方式之一。 
推导大O表示法 规则一用常量1取代运行时间中所有的加法常量。如7  8  15用1表示运算结果15大O表示法表示为O1 规则二运算中只保留最高阶项。如N^3  3n 1大O表示法表示为ON³; 规则三若最高阶项的常数不为1可将其省略。如4N2大O表示法表示为ON²; 
接下来是我们的集中排序算法 简单排序冒泡排序、选择排序、插入排序 高级排序希尔排序、快速排序 我们封装一个列表来存储数据和排序算法 
class ArrayList {constructor() {this.arr  []}insert(element) {return this.arr.push(element);}toString() {return this.arr.join( );}
}let list  new ArrayList();list.insert(4);list.insert(5);list.insert(2);list.insert(1);list.insert(3);console.log(list.toString());二、冒泡排序 
我先自己写了一遍我发现我写的这个其实是有问题的内层循环控制两个元素依次比较外层循环控制比较的趟数。这样写虽然能实现但是你会发现其实内层循环每次都要比较arr.length-1次而实际上后面元素如果排好的话根本不需要再比较了比如21345那么345就不用再比较了。 
1.冒泡排序
bubbleSort() {for(let i  0; i  this.arr.length-1; i) {for(let i  0; i  this.arr.length-1; i) {if(this.arr[i]  this.arr[i1]) {//交换两个位置的值let zzy  this.arr[i1];this.arr[i1]  this.arr[i];this.arr[i]  zzy;}}}return this.arr
}这样的话就需要进行一些小小的改进 改进的就是这个for循环的次数拿[4,2,1,3]来举例外层循环控制趟数那么4个数比较3趟依次递减j3第一趟j2第二趟j1第三趟每一趟中都要两两比较从下标为0开始依次比较j次j3第一趟比较3次j2第二趟比较2次j1第三趟比较1次。 
总结4个数要比较三趟第一趟比较3次第二趟比较2次第三趟比较1次 
bubbleSort() {for (var j  this.arr.length - 1; j  0; j--) {for (var i  0; i  j; i) {if (this.arr[i]  this.arr[i  1]) {let zzy  this.arr[i  1];this.arr[i  1]  this.arr[i];this.arr[i]  zzy;}}}return this.arr
}冒泡排序的效率 上面所讲的对于7个数据项比较次数为6  5  4  3  2  1; 对于N个数据项比较次数为(N - 1)  (N - 2)  (N - 3)  …  1  N * (N - 1) / 2 如果两次比较交换一次那么交换次数为N * (N - 1) / 4 使用大O表示法表示比较次数和交换次数分别为O(N*(N - 1)/2)和O(N*(N - 1)/4)根据大O表示法的三条规则都化简为O(N²); 
三、选择排序 
占个坑先学React去了