您的位置:首页 > 理论基础 > 数据结构算法

夕拾-数据结构-冒泡排序

2015-09-30 22:54 218 查看
冒泡排序亦算得上比较经典的排序(快速排序就是其演进)

以小元素上浮为例:

序列从后往前扫描,若当前元素小于前一个元素则交互位置。一次遍历后,最小的元素则浮了上来、

下次只需扫描除该元素的序列即可,循环n-1次即可得有序序列

void BublbeUp(int a[],int n)
{
	for(int i=0;i<n-1;i++)
	{
		bool flag=false;//跳出循环的标志
		for(int j=n-1;j>i;j--)
		{
			if(a[j]<a[j-1])
			{
				Swap(a[j],a[j-1]);
				flag=true;
			}
		}
		if(!flag) break;
	}
}


同理,我们可以让大元素下沉

void BublbeDown(int a[],int n)
{
	for(int i=0;i<n-1;i++)
	{
		bool flag=false;//跳出循环的标志 
		for(int j=0;j<n-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				Swap(a[j],a[j+1]);
				flag=true;
			}
		}
		if(!flag) break;
	}
}


使用二者的结合:双向起泡,小的上浮的同时,大的下沉

void DoubleDubble(int a[],int n)
{
	bool flag=true;
	int low=0,heigh=n-1;
	while(low<heigh && flag)
	{
		flag=false;
		for(int i=low;i<heigh;i++) //下沉 
		{
			if(a[i]>a[i+1])
			{
				Swap(a[i],a[i+1]);
				flag=true;
			}
		}
		heigh--; //下沉末端-1 
		for(int j=heigh;j>low;j--) //上浮 
		{
			if(a[j]<a[j-1])
			{
				Swap(a[j],a[j-1]);
				flag=true;
			}
		}
		low++; //上浮首端+1 
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: