冒泡算法实现

本文详细介绍了冒泡排序算法的核心思想,即通过不断交换相邻的逆序元素来逐步排序。冒泡排序在最好情况下(已排序)的时间复杂度为O(n),最坏情况下(逆序)为O(n^2)。文章提供了C++实现的代码示例,并通过三个不同初始顺序的数组进行演示。最后,输出了排序后的数组结果。

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

冒泡算法的核心思想为:
1 每1次循环,1个大数沉底;待比较数减1
2 比较相邻的2个元素,然后重复向后比较

复杂度:
当数组自然有序时为O(n)
当出现自然反序时,极端最差情况时O(n2)。

实现:

#include <iostream>
#include <algorithm>
using namespace std;

void BulldingSort(int* a,int length)
{
    int nCount = 0;
	if(a != NULL && length > 0)
	{
		bool bChanged = false;
		int i = 0;
		for(i = 0;i < length - 1;i++)
		{
			for(int j = 0 ;j < length - i - 1;j++)
			{
				if(a[j + 1] < a[j])
				{
					int nTemp = a[j];
					a[j] = a[j+1];
					a[j+1] = nTemp;
					bChanged = true;
				}
				
				nCount++;
			}
			if(!bChanged)
			{
				break;
			}
		}
		
		std:: cout <<"loop count:" << nCount << std::endl;
	}
}

int main()
{
	int a[] ={0,1,2,65,54,20,30,40,20};
	int b[] ={0,1,2,3,4,5,6,7,8};
	int c[] ={8,7,6,5,4,3,2,1,0};
	int lengthA = sizeof(a) / sizeof(a[0]);
	int lengthB = sizeof(b) / sizeof(b[0]);
	int lengthC = sizeof(c) / sizeof(c[0]);
 	BulldingSort(a,lengthA);
 	BulldingSort(b,lengthB);
	BulldingSort(c,lengthC);
 	std::for_each(a,a+lengthA,[](int i){
 	    std::cout << i << std::endl;});
 	 std:: cout << "b:" << std::endl;
 	 std::for_each(b,b+lengthB,[](int i){
 	    std::cout << i << std::endl;});
	 std:: cout << "c:" << std::endl;
	 std::for_each(c,c+lengthC,[](int i){
	    std::cout << i << std::endl;});
	return 0;
}

注:外层循坏控制沉底的次数,譬如有n个数,那么就该有n-1个数将要沉底,剩下一个数自然有序。
内层循环控制比较次数。n个数相邻2个元素比较,那么将要进行n-1次相邻2个数比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值