排序算法之選擇排序和冒泡排序

原文轉自: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;
			}
		}
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章