自适应性
Coddy 冒泡排序 课程的第 6 课,共 11 课。
我们已经讨论过冒泡排序算法的时间复杂度,它是 O(n2) 。但是,如果数组已经排好序呢?即使如此,运行时间也需要 O(n2)。
什么是自适应性?
自适应算法是指会根据给定的输入序列改变自身行为的算法。
那么,冒泡排序具有自适应性吗?
是的,我们可以让冒泡排序算法具有自适应性。我们需要编写一个最坏情况下运行时间为 O(n2)、最好情况下运行时间为 O(n) 的冒泡排序算法。这里,最好情况指的是数组已经排好序的情况。
我们会使用一个布尔标志变量来控制 while 循环,这样,如果数组在此前已经排好序,算法就会提前停止。
while(flag)
{
//code
}
我们需要重复遍历,直到数组排好序。我们已经学过如何统计交换次数,因此可以设置一个标志,并检查这一轮是否不需要交换。如果不需要交换,就可以跳出循环。
挑战
中等创建一个名为 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 在线编译器