冒泡排序
1. 算法步骤:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2. 代码实现:
外面的循环控制的是比较的轮数;里面的循环控制的是每一轮比较的次数。
(1)从前往后 注意:i取值的时候,不能取到length-1,否则j就会越界。
1 function bubbleSort(arr) { 2 var len = arr.length; 3 for (var i = 0; i < len - 1; i++) { 4 for (var j = i + 1; j < len; j++) { 5 if (arr[i] > arr[j]) { 6 var temp = arr[j]; 7 arr[j] = arr[i]; 8 arr[i] = temp; 9 } 10 } 11 } 12 return arr; 13 }
(2)从后往前 先通过循环确定最后一位的最大值,然后继续往前确定数值。
1 function bubbleSort(arr) { 2 var len = arr.length; 3 for (var i = 0; i < len - 1; i++) { 4 for (var j = 0; j < len - 1 - i; j++) { 5 if (arr[j] > arr[j + 1]) { 6 var temp = arr[j + 1]; 7 arr[j + 1] = arr[j]; 8 arr[j] = temp; 9 } 10 } 11 } 12 return arr; 13 }
3. 优化算法:
在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。
4. 什么时候最快:
当输入的数据已经是正序时
5. 什么时候最慢
当输入的数据是反序时
6. 冒泡排序的时间复杂度是多少?
最好情况下,要排序的数据已经是有序的了,我们只需要进行1次冒泡操作,所以最好情况的时间复杂度是O(n),而最坏的情况是,要排序的数据刚好是相反的,我们需要进行n-1次冒泡操作,所以最坏情况的时间复杂度为O(n^2)。
7. 冒泡排序的空间复杂度是多少?
冒泡排序过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以它的空间复杂度为O(1)。
8. 冒泡排序是稳定的排序算法吗?
冒泡排序过程,只有交换才可以改变两个元素的前后顺序,为了保证冒泡排序算法的稳定性,当相邻的两个元素大小相等的时候,我们不去做交换,相等的两个元素排序前后顺序保持不变,所以冒泡排序是稳定的排序算法。

浙公网安备 33010602011771号