实现规则为:首先制定排序规则,然后,依次两两比较待排序的数据,若不符合排序规则,则进行交换,然后依次比较下去,直到全部元素排列有序为止。
示例1:有如下一组数据{85,279,948,521,616,888},按照从大到小的顺序排列,使用冒泡排序,首先执行第一趟交换,过程如图所示。

经过五趟数据比较与交换后,数据顺序变为由大到小的有序序列。从而实现了使用冒泡排序的目的。其一般表达函数为:
void BubbleSort(dataList r[], int n)
{
int loop1, loop2, temp;
for(loop1=1;loop1<=n-1;loop1++) //外层循环,控制循环比较趟数
{
for(loop2=n;loop2>=loop1+1;loop2--) //内层循环,控制比较位置
{
if(r[loop2] < r[loop2-1]) //判断是否符合交换规则
{
temp=r[loop2];
r[loop2]=r[loop2-1];
r[loop2-1]=temp;
}
}
}
}
示例2:
# include <stdio.h>
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; i++)
{
for (j=0; j<len-1-i; j++)
{
if (a[j] > a[j+1]) //>表示升序 <表示降序
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
int main(void)
{
int a[6] = {10, 3, 7, 5, 11,-1};
int i = 0;
sort(a, 6);
for (i=0; i<6; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; i++)
{
for (j=0; j<len-1-i; j++)
{
if (a[j] > a[j+1]) //>表示升序 <表示降序
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
int main(void)
{
int a[6] = {10, 3, 7, 5, 11,-1};
int i = 0;
sort(a, 6);
for (i=0; i<6; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
示例3:给输入的10个数字进行排序,将他们以从小到大的顺序输出到屏幕上
#include <stdio.h>
main()
{
int a[10];
int i, j, t;
printf("输出10个数字:\n");
for(i=0; i<9; i++)
{
scanf("%d",&a[i]);
}
printf("\n");
//冒泡排序法
for(j=0;j<=9;j++)
{
for(i=0;i<=9-j;i++)
{
if(a[i] > a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
}
printf("输出排序后的数字:\n");
for(i=1; i<=9; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
方法二:
# include <stdio.h>
//冒泡排序
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; i++)
{
for (j=0; j<len-1-i; j++)
{
if (a[j] > a[j+1]) //>表示升序 <表示降序
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
int main(void)
{
int a[10];
int i=0;
int j;
printf("输入10个数字:\n");
for(j=0; j<=9; j++)
{
scanf("%d", &a[j]);
}
printf("\n");
//排序
sort(a, 10);
//打印出排完序的数字,遍历
for (i=0; i<=9; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
优劣:冒泡排序的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),
但是有两个优点:
1.“编程复杂度”很低,很容易写出代码;
2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。
致力于ios开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架