冒泡排序

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. 冒泡排序是稳定的排序算法吗?

冒泡排序过程,只有交换才可以改变两个元素的前后顺序,为了保证冒泡排序算法的稳定性,当相邻的两个元素大小相等的时候,我们不去做交换,相等的两个元素排序前后顺序保持不变,所以冒泡排序是稳定的排序算法。

posted @ 2021-06-26 22:30  icyyyy  阅读(84)  评论(0)    收藏  举报