冒泡排序(Bubble Sort)是一种基础且直观的排序算法,它通过重复遍历要排序的数列,逐个比较相邻的元素并交换它们的位置,以达到将较大的元素逐渐“浮”到数列末尾,较小的元素“沉”到数列前端的目的。整个过程会反复进行,直到没有更多的元素需要交换,这就意味着数列已完全排序。
该算法的核心思想是两层嵌套循环。外层循环控制排序的次数,通常称为趟数,随着每趟遍历的进行,最大的元素会被逐次“冒泡”到数组的末尾。内层循环则负责实际的元素比较和交换,它的范围随着外层循环的迭代逐渐减小,因为每次外层循环结束后,数组的最后一个元素已经确定了正确的位置。
在C语言实现中,如给出的代码所示:
```c
#include<stdio.h>
void bubbleSort(int arr[], int n){
int i, j, temp;
for(i = 0; i < n - 1; i++) { // 外层循环控制排序趟数
for(j = 0; j < n - i - 1; j++) { // 内层循环控制每趟排序次数
if(arr[j] > arr[j + 1]) { // 如果当前元素大于下一个元素
temp = arr[j]; // 临时存储较大元素
arr[j] = arr[j + 1]; // 将较大元素移到后一位
arr[j + 1] = temp; // 将较小元素放回原位
}
}
}
}
int main(){
int arr[] = {64, 34, 25, 12, 22, 11, 90}; // 待排序数组
int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
bubbleSort(arr, n); // 调用冒泡排序函数
printf("Sorted array:\n");
for(int i = 0; i < n; i++)
printf("%d", arr[i]); // 打印排序后的数组
return 0;
}
```
在这个C语言程序中,`bubbleSort`函数接收一个整数数组和其长度作为参数,执行冒泡排序算法,而`main`函数则定义了一个示例数组,调用`bubbleSort`函数进行排序,并显示排序后的结果。冒泡排序虽然简单,但其时间复杂度较高,最坏情况下需要O(n^2)的时间,对于大规模数据排序效率较低,但对于小型数据集或教学演示,它是一个直观易理解的选择。