1. 程式人生 > >資訊學奧賽系列教程:氣泡排序

資訊學奧賽系列教程:氣泡排序

排序:

按照從小到大,或者從大到小的順序,將雜亂無章的資料進行整理的過程,叫排序,排序一般在一維陣列中進行。

生活中排序的例子:上體育課的時候,老師把一排同學按身高進行排序。       考試後,老師按分數從高到低對同學的成績排名次。

氣泡排序原理和實現步驟:

方法:從前到後依次掃描陣列元素,掃描一次稱為一趟。      

規則:每趟掃描時,陣列元素前一個和後一個相比較,如果次序和要求的次序不符合,則將兩個元素交換。

將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}})