Menu
CoddyTech

自适应性

Coddy 冒泡排序 课程的第 6 课,共 11 课。

我们已经讨论过冒泡排序算法的时间复杂度,它是 O(n2) 。但是,如果数组已经排好序呢?即使如此,运行时间也需要 O(n2)。 

什么是自适应性?

自适应算法是指会根据给定的输入序列改变自身行为的算法。

那么,冒泡排序具有自适应性吗?

是的,我们可以让冒泡排序算法具有自适应性。我们需要编写一个最坏情况下运行时间为 O(n2)、最好情况下运行时间为 O(n) 的冒泡排序算法。这里,最好情况指的是数组已经排好序的情况。

我们会使用一个布尔标志变量来控制 while 循环,这样,如果数组在此前已经排好序,算法就会提前停止。

 

while(flag)

{

    //code

}

 

我们需要重复遍历,直到数组排好序。我们已经学过如何统计交换次数,因此可以设置一个标志,并检查这一轮是否不需要交换。如果不需要交换,就可以跳出循环。 

 

challenge icon

挑战

中等

创建一个名为 ad_bubblesort 的函数,它接收一个数组和数组的大小。执行自适应冒泡排序算法。记得使用名为 flag 的变量来检查是否发生了交换。

亲手试试

#include <stdio.h>
#include <stdlib.h>

int* ad_bubblesort(int* arr, int arr_size, int n, int* returnSize) {
    // 在这里编写代码
    *returnSize = n;
    return arr;
}

冒泡排序中的所有课

自己练习: C 在线编译器