赞
踩
目录
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
在C语言中实现冒泡排序的基本步骤如下:
- #include <stdio.h>
-
- void bubbleSort(int arr[], int n) {
- // 外层循环控制排序趟数
- for (int i = 0; i < n - 1; i++) {
- // 内层循环每轮遍历未排序部分
- for (int j = 0; j < n - 1 - i; j++) {
- // 比较相邻的两个元素并交换
- if (arr[j] > arr[j + 1]) {
- // 交换元素
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- }
-
- // 示例:对数组进行排序并输出结果
- int main() {
- int num[] = {64, 34, 25, 12, 22, 11, 90};
- int len = sizeof(num) / sizeof(num[0]);
-
- printf("Before sorting: \n");
- for (int i = 0; i < len; i++) {
- printf("%d ", num[i]);
- }
-
- bubbleSort(num, len);
-
- printf("\nAfter sorting: \n");
- for (int i = 0; i < len; i++) {
- printf("%d ", num[i]);
- }
-
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
在上述代码中:
bubbleSort
函数接收一个整型数组和它的长度作为参数。i
来控制总共需要进行多少次比较交换的过程,因为每次比较后最大的元素都会被移动到正确的位置,所以每次循环可以少处理一个元素,因此外层循环次数为n-1
。j
遍历当前还未完全排序的部分,每次比较相邻的两个元素,如果前一个比后一个大,则交换它们的位置。请注意,冒泡排序的时间复杂度为,在数据量较大时效率较低,但在数据量较小或近乎有序的情况下仍有一定的实用价值。
最好情况:当输入数组已经是完全有序时,冒泡排序只需进行一次遍历就可以确定没有交换发生,因此它可以在时间内完成排序。
最坏情况:当输入数组是完全逆序排列时,冒泡排序需要进行轮比较,每轮都需要比较
次(i为当前轮数),总的比较次数是
,因此时间复杂度为
。
平均情况:冒泡排序的平均时间复杂度也为O(n^2),因为无论数组原始顺序如何,都需要对所有元素进行至少一遍的遍历。
冒泡排序是一种原地排序算法,只需要常量级别的额外空间。在实现过程中,通常只用到一个或两个临时变量来交换相邻元素,而不需要额外的数据结构存储中间结果。所以,冒泡排序的空间复杂度为。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。