排序之冒泡排序(数组)

冒泡法:我觉得重点在于两两比较相邻记录的关键字。

冒泡法的定义:两两比较相邻记录的关键字,如果反序,就交换,直到没有反序为止。

时间复杂度:最好的情况下,也就是表就是顺序的,也就是只要比较n-1次,O(n);

最坏的情况下,刚好逆序,也就是要比较(n-1)+(n-2)+...+1=n(n-1)/2,为O(n2)。因此总的时间复杂度为O(n2)。

#include<iostream>
using namespace std;
#define M 10

void swap(int *a, int m, int n)
{
	int temp;
	temp = a[m];
	a[m] = a[n];
	a[n] = temp;
	
}
void Bubblesort(int *a,int length)
{
	int i,j;
	for(i=0;i<length-1;i++)
	{
		for(j=length-2;j>=i;j--)
		{
			if(a[j]>a[j+1])
			{
				swap(a,j,j+1);
			}
		}
	}
}

void Bubblesort2(int *a,int length)
{
	int i,j;
	typedef int status;
	status flag = true;
	for(i=0;(i<length-1)&&flag;i++)
	{   flag = false;
		for(j=length-2;j>=i;j--)
		{
			if(a[j]>a[j+1])
			{
				swap(a,j,j+1);
				flag = true;
			}
		}
	}
}
int main()
{
	int r[M];
	for(int i=0;i<M;i++)
	{
		r[i] = rand() % M;
	}
	for(int i=0;i<M;i++)
	{
		cout<<r[i]<<'\t';
	}
	cout<<endl;
	Bubblesort2(r,M);
	for(int i=0;i<M;i++)
	{
		cout<<r[i]<<'\t';
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hannah_aimee/article/details/60878473