初级系列8.冒泡排序
冒泡排序
问题描述
对N个整数(数据由键盘输入) 进行升序排列
问题分析
冒泡排序是在两个相邻元素之间进行比较交换的过程将一个无序表变成有序表
思想:从表头开始往后扫描数组,在扫描过程中逐对比较相邻两个元素的大小
若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为
消去一个逆序,在扫描过程中,不断将两相邻元素中的大者往后移动,最后就将
数组中的最大者换到了表的最后,这正是数组中最大元素应有的位置,然后,在剩下的
数组元素中(n-1个元素)重复上面的过程,将次小元素放到倒数第2个位置。不断重复上述过程
直到剩下的数组元素为零为止,此时的数组就变为了有序
假设数组元素的个数为n,在最坏情况下需要的比较总次数为:((n-1) + (n-2) + .... + 2 + 1) = n(n-1)/2
算法设计
双层循环,第一层循环控制交换的轮数,第二层循环控制每轮需要交换的次数
/* !< use c */
#include <stdio.h>
#define N 3 /* !< 数组大小改变时只需要改变N对应的值不需要改动程序 */
int main(void)
{
int i, j, a[N], t, count = 0;
printf("为数组元素赋初值:\n");
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
for (i = 1; i <= N-1; i++) { /* !<控制比较的轮数 */
for (j = 0; j < N-i; j++) { /* !<控制每轮比较的次数 */
if (a[j] > a[j+1]) { /* !<数组相邻两个元素进行交换 */
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("经过交换后的数组元素为:\n");
for (i = 0; i < N; i++) {
count++;
printf("%d ", a[i]);
if (count % 5 == 0) { //控制每行输出5个数
printf("\n");
}
}
printf("\n");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!