冒泡排序是一种经典的排序算法,它的基本思路是重复地遍历待排序序列,每次比较相邻的两个元素,如果顺序不对就交换位置,直到整个序列有序为止。下面是冒泡排序的C语言代码实现:
```c
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) { // 外层循环控制遍历次数
for (j = 0; j < n - 1 - i; j++) { // 内层循环控制比较次数
if (arr[j] > arr[j + 1]) { // 如果前一个数大于后一个数,就交换位置
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
在上面的代码中,变量arr表示待排序序列,n表示序列长度。外层循环控制遍历次数,每次遍历过后,待排序序列的最大值就会被移动到末尾,因此内层循环可以少遍历几次。内层循环控制比较次数,每次比较相邻的两个元素,如果顺序不对就交换位置。变量temp用来存储交换过程中需要交换的数。
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。虽然冒泡排序的算法复杂度比较高,但由于其原理简单易懂,代码实现容易,在小规模数据的排序中仍有广泛应用。
下面是一个简单的示例,演示了如何使用冒泡排序对一个整型数组进行排序:
```c
#include
void bubbleSort(int arr[], int n);
int main() {
int arr[] = { 6, 3, 8, 2, 9, 1 };
int n = sizeof(arr) / sizeof(int);
int i;
printf("Before sorting:
");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("
");
bubbleSort(arr, n);
printf("After sorting:
");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) { // 外层循环控制遍历次数
for (j = 0; j < n - 1 - i; j++) { // 内层循环控制比较次数
if (arr[j] > arr[j + 1]) { // 如果前一个数大于后一个数,就交换位置
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
输出结果如下:
```
Before sorting:
6 3 8 2 9 1
After sorting:
1 2 3 6 8 9
```
可以看到,经过排序后,数组元素已按升序排列。