信息学奥赛系列教程:冒泡排序

版权声明:本文为博主原创文章,未经允许不得转载 https://blog.csdn.net/noipBar/article/details/84562422

排序:

按照从小到大,或者从大到小的顺序,将杂乱无章的数据进行整理的过程,叫排序,排序一般在一维数组中进行。

生活中排序的例子:上体育课的时候,老师把一排同学按身高进行排序。       考试后,老师按分数从高到低对同学的成绩排名次。

冒泡排序原理和实现步骤:

方法:从前到后依次扫描数组元素,扫描一次称为一趟。      

规则:每趟扫描时,数组元素前一个和后一个相比较,如果次序和要求的次序不符合,则将两个元素交换。

将5,3,4,1,6,2进行排序,第一趟比较如下图:

排序过程中每趟的排序步骤如下图所示:

冒泡排序代码实现:

#include <iostream>
using namespace std;
const int MAXN=10001;
int main()
{
	int n,i,j;
	float temp,a[MAXN];
	cout<<"请输入排序个数:"<<endl;
	cin>>n;
	for (i=0;i<n;i++)
	{
		cout<<"请输入第"<<i+1<<"个数:"<<endl;
		cin>>a[i];
	}
	
	for (i=n-1;i>0;i--)
	{
	   for (j=0;j<i;j++)
	   {
	   	 if (a[j]>a[j+1])
	   	 {
	   	 	swap(a[j],a[j+1]);//比较交换
	   	 }
	   }	
	}
	
	for (i=0;i<n;i++) //输出
	{
		cout<<a[i]<<" ";
	} 
	return 0;
}

冒泡排序总结:

          冒泡排序,只涉及前后两个数的比较大小和两个数交换,所以是稳定的排序。

         如果待排序的元素已经排好,只需要一趟扫描就完成,时间复杂度为O(n)

         最坏的情况下,需要进行n-1趟排序,并且每次需要交换前后两个元素,时间复杂度为O(n^{^{2}})

猜你喜欢

转载自blog.csdn.net/noipBar/article/details/84562422