氣泡排序演算法的基本思想是:假設待排序表長為n,從後往前(或從前往後),兩兩比較相鄰元素的值,若為逆序(即a[i-1]>a[i]),則交換它們,直到序列比較完。我們稱它為一趟冒泡,如果將最小的元素交換到待排序序列的第乙個位置(關鍵字小的元素往上「漂浮」,這就是氣泡排序名字的由來)。下一趟冒泡時,前一趟確定的最小元素不再參與比較,待排序列減少乙個元素,每趟冒泡的結果把序列中最小元素放到了序列的最終位置,……,這樣最多做n-1趟冒泡就能把所有的元素排好序。
void bubblesort(elemtype a,int n)
if(flag==false)
return;//本趟沒有發生交換,說明已經有序}}
空間複雜度:僅使用了常數個輔助單元,因而空間複雜度為o(1)。
時間複雜度:當初始序列時,顯然第一趟冒泡後flag依然為false(本趟冒泡沒有元素交換),從而直接跳出迴圈,比較次數為n-1,移動次數為0,從而最好情況下的時間複雜度為o(n);當初始序列為逆序時,需要進行n-1趟排序,第i趟排序要進行n-i次關鍵字比較,而且每次比較都必須移動元素3次來交換元素位置。這種情況下,比較次數=n(n-1)/2,移動次數=3n(n-1)/2。
從而最壞情況下的時間複雜度為o(n²)。其平均時間複雜度為o(n²)。
穩定性:由於當i>j且a[i]=a[j]時,不會交換兩個元素,所以氣泡排序是乙個穩定的排序方法。
資料結構 氣泡排序
起泡排序的過程很簡單。首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依次類推,直至第n 1個記錄和第n個記錄的關鍵字進行比較為止。上述過程稱作第一趟起泡排序,其結果使得關鍵字最大的記錄被安置到最後乙個記錄的位置上。然後進行...
資料結構 氣泡排序
目標效果 原始碼 include void print out int a,int n void bubble sort int a,int n int main printf 起泡排序 n printf 排序前 n printresult a,10 排序方法 bubblesort a,10 pri...
資料結構 氣泡排序
氣泡排序 氣泡排序的主要原理是兩兩比較,將較大者放在靠後的位置,用此種方法,將最大的值一點一點推到數列的後端。因此,對於乙個長為n的陣列,經過n 1遍冒泡,一定能將陣列排序。時間複雜度 設t n 為對長度為n的待排序列進行排序的時間。則比較次數為 n 1 n 2 1 n 1 n 2 o n 2 而且...