標籤:style blog color os io 資料 for ar
【原理】它是一種較簡單的排序演算法。它會遍曆若干次要排序的數列,每次遍曆時,它都會從前往後依次的比較相鄰兩個數的大小;如果前者比後者大,則交換它們的位置。這樣,一次遍曆之後,最大的元素就在數列的末尾。 採用相同的方法再次遍曆時,第二大的元素就被排列在最大元素之前。重複此操作,直到整個數列都有序為止。 【複雜度】
冒泡排序的時間複雜度是O(n2),空間複雜度是O(n),是一種穩定的排序演算法。
需要注意的是:每一輪冒泡後,最後一個數必然是這一輪排序完的最大值,下一輪不必再參與冒泡。所以,內部迴圈的上限是size-i-1。
【代碼】
#include<iostream>using namespace std;template<class T>void bubble_sort(T Array[],const int size){ T temp;//中間變數 int flag;//用於標記 for(int m=0;m<size-1;m++)//冒泡排序的關鍵代碼,外部迴圈確定邊界(即迴圈的最大值) { flag=0; for(int n=0;n<size-1-m;n++) { if(Array[n]>Array[n+1])//內部迴圈用於比較和交換資料 { temp=Array[n]; Array[n]=Array[n+1]; Array[n+1]=temp; flag=1;//若發生交換,則標記置1 } } if(flag==0) { break;//若沒發生交換,則說明數列已有序 } }}int main(){ int temp;//中間變數 int a[10]; cout<<"please input 10 numbers: "<<endl; for(int i=0;i<10;i++)//輸入原始數組 { cin>>a[i]; } bubble_sort(a,sizeof(a)/sizeof(int)); for(int j=0;j<10;j++)//輸出排序後的數組 { cout<<a[j]<<" "; } return 0;}