冒泡排序算法详解:C语言实现

0 下载量 75 浏览量 更新于2024-08-03 收藏 2KB TXT 举报
冒泡排序是一种基础且经典的排序算法,其工作原理就像水底下的气泡逐渐上升到水面一样,较大的元素逐渐“冒泡”到数列的顶端。这个过程通过反复遍历数列来实现,每次遍历都会确保当前未排序部分的最大值(或最小值,取决于排序方向)被放到正确的位置。由于其简单易懂的特性,冒泡排序常被用于教学示例。 在C语言中,我们可以使用以下步骤来编写冒泡排序程序: 1. 定义一个冒泡排序函数,如`bubbleSort`,接受一个整型数组`arr`和它的大小`n`作为参数。 2. 在冒泡排序函数内部,使用两个嵌套的`for`循环。外层循环控制遍历次数,内层循环执行实际的比较和交换操作。 3. 内层循环中,使用`if`语句比较相邻的两个元素,如果它们的顺序错误(即前一个元素大于后一个元素),则交换它们的位置。 4. 在主函数`main`中,先定义一个待排序的数组,并初始化一些数值。 5. 使用`sizeof`运算符计算数组的元素个数`n`。 6. 打印原始数组的值,调用`bubbleSort`函数进行排序,然后打印排序后的数组。 以下是对上述代码的详细解释: ```c // 包含头文件,用于标准输入输出 #include<stdio.h> // 定义冒泡排序函数 void bubbleSort(int arr[], int n) { int i, j, temp; // 声明变量i, j, 和临时变量temp // 外层循环,遍历n-1次 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]); // 计算数组元素个数 printf("原始数组:\n"); // 打印原始数组 for (int i = 0; i < n; i++) printf("%d", arr[i]); bubbleSort(arr, n); // 调用冒泡排序函数 printf("\n排序后的数组:\n"); // 打印排序后的数组 for (int i = 0; i < n; i++) printf("%d", arr[i]); return 0; // 主函数返回0,表示程序正常结束 } ``` 这段C语言程序实现了冒泡排序算法,当运行时,它会输出原始数组和经过冒泡排序后的数组。冒泡排序的时间复杂度为O(n^2),因此对于大规模数据,效率较低。但在处理小规模数据或作为排序算法的基础理解上,它是十分有用的。