排序算法之选择排序和冒泡排序

原文转自:http://blog.csdn.net/morewindows/article/details/6657829

1:算法分析中比较经典的当属于排序算法,最早接触的是选择排序和冒泡排序;但是这两种算法的效率都不是很高,通过计算可以得知时间复杂度都为O(n的平方)

冒泡排序非常容易理解和实现的;

设数组长度为N。

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

void Bubblesort_1(int a[],int n)
{
	int i,j,temp;
	for(i=1;i<n;i++)
	{
		for(j=0;j<n-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}
上述算法的缺点就是,如果一个数组已经有序,仍然需要这么多的比较计算,因此可以做如下改进:

void Bubblesort_2(int a[],int n)
{
	int i,j,temp;
	bool flag=1;
	i=n;
	while(flag)
	{
		flag=false;
		for(j=0;j<i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
				flag=true;
			}
		}
		i--;
	}
}
选择排序的原理也十分简单,就是现在a[0]~a[n-1]找到最小值然后与a[0]交换,然后在进行一次排序在a[1]~a[n-1]找到最小值与a[1]交换,直到排序完成; 代码如下:

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




猜你喜欢

转载自blog.csdn.net/zhang_alongzd/article/details/51685336