冒泡排序:初学者的必经之路
冒泡排序:初学者的必经之路
对于初学C语言的程序员来说,学习排序算法是迈入编程世界的重要环节之一。在众多排序算法中,冒泡排序(Bubble Sort) 因其逻辑简单、易于实现的特点,被广泛推荐为初学者的入门选择。尽管它在实际应用中并不是最高效的排序方法,但它却是理解排序思想和算法优化的一个重要起点。什么是冒泡排序?冒泡排序是一种通过比较和交换相邻元素来实现排序的算法。它的名称来源于算法执行时较大的
冒泡排序:初学者的必经之路
对于初学C语言的程序员来说,学习排序算法是迈入编程世界的重要环节之一。在众多排序算法中,冒泡排序(Bubble Sort) 因其逻辑简单、易于实现的特点,被广泛推荐为初学者的入门选择。尽管它在实际应用中并不是最高效的排序方法,但它却是理解排序思想和算法优化的一个重要起点。
什么是冒泡排序?
冒泡排序是一种通过比较和交换相邻元素来实现排序的算法。它的名称来源于算法执行时较大的元素逐步“冒泡”到数组末尾的过程。每一轮排序中,算法会从头到尾比较相邻的元素,并根据它们的大小决定是否交换,直至所有元素按升序排列。
冒泡排序的基本步骤:
- 依次比较相邻的两个元素:
- 如果前一个元素比后一个元素大,就交换它们的位置。
- 如果前一个元素小于或等于后一个元素,则不做任何操作。
- 重复以上过程:
- 每完成一轮排序,当前未排序部分中最大的元素会“冒泡”到末尾。
- 数组中未排序的部分逐渐缩小,直到数组完全有序。
- 优化:提前退出:
- 如果在某一轮中没有发生任何交换,说明数组已经有序,可以提前结束排序过程。
示例讲解
假设有一个待排序的数组:{64, 4, 25, 12, 22, 11, 90}
,通过冒泡排序排序过程如下:
- 第一轮:从头开始,两两比较并交换,最终“最大值”
90
移动到数组末尾。- 比较 64 和 4,交换 →
{4, 64, 25, 12, 22, 11, 90}
- 比较 64 和 25,交换 →
{4, 25, 64, 12, 22, 11, 90}
- 依次类推,直到 90 移动到末尾。
- 比较 64 和 4,交换 →
- 第二轮:剩余的部分重复上述过程,次大的元素
64
被排到倒数第二位。 - 如此往复,直至数组完全有序。
冒泡排序的C语言实现
下面是冒泡排序的完整C语言实现代码,包含优化以减少不必要的比较与交换。
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) { // 外层循环控制排序轮数
int swapped = 0; // 标记本轮是否发生交换
for (int j = 0; j < n - i - 1; j++) { // 内层循环负责比较相邻元素
if (arr[j] > arr[j + 1]) {
// 如果前一个元素大于后一个元素,则交换它们
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1; // 标记发生了交换
}
}
// 如果本轮没有发生任何交换,提前退出
if (!swapped) {
break;
}
}
}
// 主函数
int main() {
int arr[] = {64, 4, 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]);
}
printf("\n");
bubbleSort(arr, n); // 调用冒泡排序函数
printf("排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
代码详解
- 外层循环:控制排序的轮数,每轮将未排序部分中最大的元素移动到末尾。
- 内层循环:依次比较相邻元素,决定是否交换。
- 优化标记
swapped
:如果某一轮中没有发生任何交换,说明数组已经有序,程序可以提前结束,提高效率。 - 输入输出:通过打印数组的排序前后状态,验证排序是否正确。
程序运行结果
以数组 {64, 4, 25, 12, 22, 11, 90}
为输入,程序的输出结果如下:
冒泡排序的特点
- 优点:
- 逻辑简单,适合初学者理解和实现。
- 针对已经部分有序的数组效率较高,可通过优化提前结束。
- 缺点:
- 时间复杂度较高:最坏情况下需要比较 n×(n−1)/2 次,时间复杂度为 O(n^2)。
- 不适合处理大规模数据。
- 适用场景:
- 小规模数据排序。
- 学习和理解排序算法的基础。
总结
冒泡排序虽然不是最优的排序算法,但它是学习编程逻辑和算法思想的一个重要起点。通过冒泡排序,初学者可以掌握排序的基本思路,并为进一步学习更复杂的排序算法(如快速排序、归并排序)打下坚实基础。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-10,如有侵权请联系 cloudcommunity@tencent 删除排序排序算法数组算法优化#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-22 01:17:21
上一篇:想在linux平台拥有和vs一样的体验模式吗?只需配置一下你的vim便可以轻松达到,让你日常编写代码爽到飞起的vim配置,他来了
下一篇:Access denied for user ‘qingtingstpublic’@’xxx’ (using password: YES)宝塔数据库远程无法连接
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 考特 | 25分钟前 发表 |
arr[i]); } printf("\n"); return 0; }代码详解外层循环:控制排序的轮数 | |
本站网友 惠民房屋出租 | 26分钟前 发表 |
次大的元素64被排到倒数第二位 | |
本站网友 星800优惠券 | 26分钟前 发表 |
可通过优化提前结束 | |
本站网友 望京房屋出租 | 5分钟前 发表 |
11 | |
本站网友 张家港国税 | 4分钟前 发表 |
通过冒泡排序 | |
本站网友 湖南省军区医院 | 24分钟前 发表 |
22 | |
本站网友 中国房地产开发集团 | 5分钟前 发表 |
提前退出 if (!swapped) { break; } } } // 主函数 int main() { int arr[] = {64 | |
本站网友 男性结扎手术视频 | 30分钟前 发表 |
90}比较 64 和 25 | |
本站网友 毛羽 | 18分钟前 发表 |
25 | |
本站网友 swisse蔓越莓 | 19分钟前 发表 |
本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 螃蟹煮多久 | 29分钟前 发表 |
交换 → {4 | |
本站网友 易推广助手 | 24分钟前 发表 |
直至所有元素按升序排列 | |
本站网友 胃溃疡吃什么食物好 | 2秒前 发表 |
次大的元素64被排到倒数第二位 | |
本站网友 防城港美食 | 10分钟前 发表 |
并根据它们的大小决定是否交换 | |
本站网友 做梦梦见前男友 | 21分钟前 发表 |
则交换它们 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = 1; // 标记发生了交换 } } // 如果本轮没有发生任何交换 | |
本站网友 营养减肥食谱 | 20分钟前 发表 |
数组中未排序的部分逐渐缩小 |