冒泡排序

本文介绍了冒泡排序算法,因其元素移动过程类似气泡沉浮得名。使用C++的template模板实现代码,通过设置标志位判断排序是否完成,每趟将最大元素移到右边并缩短遍历长度。还给出了int和double类型数组排序的引用示例,总结了算法特性,并提供git地址。

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

冒泡排序

1、简介

排序过程中,所有元素朝各自最终位置亦步亦趋的移动过程,犹如气泡在水中的上下沉浮,冒泡排序(bubblesort)算法也因此得名。

2、代码

代码如下:

template<class T>
int BubbleSort(T *aArray, int aCount)
{
	if(0 == aCount || NULL == aArray)
		return sERROR;
	bool sortFlag = false;			//排序标志,初始化为false

	while(!sortFlag)
	{
		sortFlag = true;	//假设排序完成
		
		for(int i = 0; i < aCount - 1; i ++)		//从左向右检查aArray[0]-aArray[n-1]内的相邻元素
		{
			if(aArray[i] > aArray[i + 1])		//若aArray[i]>aArray[i + 1],交换
			{
				swap(aArray[i], aArray[i + 1]);	
				sortFlag = false;
			}
		}
		aCount--;		//一轮遍历结束,得到最大的数值在最右边。因此缩短遍历的长度。
	}
	return sSUCCESS; 
}

1、由于需要对不同数据类型的内容进行排序,所以使用了C++的template模板。
2、函数开始会判断排序的数组以及数组的长度。
3、设置标志位,赋值为false。后续以标志位的值来判断整个数组是否排序完成。
4、从左往右比较两个相邻的元素,把数值大的元素移动到右边。一趟下来,在最右边的数值就是数组中最大的数值。
5、由于数组中最大的数值已经在最右边了,所以将数组的长度-1,缩短需要遍历的长度,缩短时间。

3、引用

使用方法如下:

int main(int argc, char ** argv)
{
	int iArray[] = { 49,38,65,97,76,13,27,49,10 };
	int iSize = sizeof(iArray) / sizeof(int);
	
	cout <<"排序前:"<<endl;
	PrintArray(iArray, iSize);
	
	BubbleSort(iArray, iSize);
	
	cout <<"排序后:"<<endl;
	PrintArray(iArray, iSize);
	
	double dArray[] = { 12.3,90.0,123.44,22.5,99.4,34.6,23.3,78.5,20.0 };
	int dSize = sizeof(dArray) / sizeof(double);
	
	cout <<"排序前:"<<endl;
	PrintArray(dArray, dSize);
	
	BubbleSort(dArray, dSize);
	
	cout <<"排序后:"<<endl;
	PrintArray(dArray, dSize);
	
	return sSUCCESS;
}

1、第一部分为int类型的数组排序。
2、第二部分位double类型的数组排序。

4、总结

起泡排序算法的不变性和单调性可分别概括为:经过k趟扫描交换之后,最大的前k个元素必然就位;经过k趟扫描交换之后,待求解问题的有效规模将缩减至n-k;

5、git地址如下

https://github.com/FengAfra/WorkSpace/tree/dev/Arithmetic/BubbleSort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值