c语言数组冒泡排序是怎么实现的
更新时间:2023-10-30
## 算法简介
冒泡排序是一种简单的排序算法,它通过不断交换相邻两个元素的位置,将较大的元素逐步往后移动,最终达到排序的目的。其名称“冒泡”是因为较小的元素会像气泡一样从底部“冒”到顶部。冒泡排序平均时间复杂度为O(n^2)。
## 算法步骤
1. 比较相邻的两个元素,如果第一个比第二个大,则交换它们的位置。
2. 对每一对相邻的元素进行步骤1,直到最后一对元素。
3. 重复步骤1和步骤2,直到所有元素都被排序为止。
## 代码示例
下面是使用C语言实现冒泡排序的代码示例:
```c
#include
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[] = {5, 2, 1, 3, 9, 7, 6, 8, 4};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("排序后的数组:");
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
## 代码解释
在上面的代码示例中,定义了一个冒泡排序函数bubbleSort,它接收一个数组arr和数组的大小n作为参数。通过两个for循环来依次比较数组中相邻的两个元素,如果需要交换它们的位置,则交换它们,并在每次比较完成后将已排序的元素排除在外。最终,经过多次比较和交换后,整个数组中的元素都会按照从小到大的顺序排列。
在main函数中,定义了一个测试数组arr,并计算出其大小n。然后调用bubbleSort函数,并输出排序后的数组。
## 时间复杂度
在最坏情况下,冒泡排序需要进行n(n-1)/2次比较和交换,因此其时间复杂度为O(n^2)。在最好情况下,即数组已经有序,只需要进行一次比较就可以确定数组已经排好序了,此时时间复杂度为O(n)。因此,冒泡排序的时间复杂度取决于数组中元素的排列情况。