冒泡排序

本文详细介绍了冒泡排序的基本原理及其C语言实现,并提出了针对冒泡排序的一种优化方案,即在数据已有序的情况下提前终止排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序:

简单点说,就是一组数据,第0个和第1个比较,大的放后面,接着第1个和第2个比较,第2个和第3个比较……依次下去,比出一个最大的取出来;剩下的重复上个动作,每次都比较出一个最大的。如果有n个数据的话,第一次比较n-1次,第二次n-2次……一共需要重复n-1次。

可以利用代码来实现:

#include<stdio.h>
void main()
{
int arr[]={45,5,68,98,41,64,78};  
 //定义一个数组
int len = sizeof(arr) / sizeof(arr[0]);  //表示数组的元素个数
        int i,j,k;
for(i = 0;i < len - 1;i++)    //外层循环
{
for(j = 0;j < len - i - 1;j++)    //内层循环
{
if(arr[j] > arr[j+1])  //交换
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(k = 0;k < len;k++)   //输出
{
printf("%d ",arr[k]);
}
}


冒泡排序的优化,在计算机执行冒泡排序的循环时,考虑到时间复杂度的问题,如果在外循环未循环完之前,数据已经有序,则就不用使循环继续执行下去,需要立一个flag,程序如下

void main()
{
int arr[]={45,5,68,98,41,64,78};   
 //定义一个数组
int len = sizeof(arr) / sizeof(arr[0]);  //表示数组的元素个数
        int i,j,k;

int flag = 0;    //立一个flag
for(i = 0;i < len - 1;i++)    //外层循环
{
for(j = 0;j < len - i - 1;j++)    //内层循环
{
if(arr[j] > arr[j+1])  //交换
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;

flag = 1;   //如果发生交换,flag变为1
}
}

if(flag==0)   //如果未发生交换,表示已经有序,直接break

{

break;

}
}
for(k = 0;k < len;k++)   //输出
{
printf("%d ",arr[k]);
}
}

希望对博友们有帮助。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值