冒泡排序是一种基础且高效的排序算法,尤其在处理小规模数据时。它的基本思想是通过重复遍历数组,比较相邻的元素并根据需要交换它们,从而逐渐将较大的元素推向数组的末尾。在这个过程中,每一轮遍历都会确保当前未排序部分的最大值“冒泡”到正确的位置。
在C语言中实现冒泡排序,我们可以定义一个函数来执行这个过程。如上述代码所示,定义了一个名为`bubble_sort`的函数,它接受一个整数数组`arr`和数组的长度`n`作为参数。函数内部使用两层循环来实现冒泡排序。
外层循环(`for (int i = 0; i < n - 1; i++)`)控制遍历的次数,因为每一遍历都会将最大元素移动到正确位置,所以总共需要遍历`n-1`次。内层循环(`for (int j = 0; j < n - 1 - i; j++)`)则负责在每一轮中比较并交换相邻的元素。内层循环的终止条件是`j < n - 1 - i`,这是因为在每一轮结束后,最大的`i`个元素都已经在正确的位置上,因此后续遍历无需再考虑它们。
比较相邻元素的部分用`if (arr[j] > arr[j + 1])`实现,如果前一个元素大于后一个元素,则交换它们的位置。交换操作通过一个临时变量`temp`来完成,避免了直接交换两个元素导致的混乱。
在`main`函数中,我们创建了一个待排序的数组`arr`,计算其长度`n`,然后调用`bubble_sort`函数进行排序。排序完成后,使用`printf`打印出排序后的数组。
冒泡排序的时间复杂度在最坏的情况下是O(n²),其中n是数组的长度,这是因为每次都需要遍历整个数组。但在最好的情况下,即数组已经是有序的,冒泡排序只需要遍历一次,时间复杂度为O(n)。因此,冒泡排序适用于小规模数据或部分有序的数据,对于大规模无序数据,效率较低,通常不推荐使用。然而,由于其简单易懂的实现方式,冒泡排序常用于教学和理解排序算法的基本原理。