氣泡排序的基本原理見如下鏈結
首先,氣泡排序的時間複雜度是由具體資料的排列順序所確定的,如果是有序資料,例如公升序排列,則複雜度為0,如果是降序排列的資料(而程式是進行公升序排列),則複雜度為o(n
2n^2
n2),具體可由下面的程式推導出來:兩層迴圈中的操作語句一共要被執行(n-1)+(n-2)+…+2+1次,一共是n(n-1)/2次,所以省略了係數和低次項後,就是o(n
2n^2
n2)了。這也是最壞的情況。
在具體的程式實現時,需要將排序演算法封裝成乙個函式,為了將函式值傳遞出來而不占用額外的儲存空間,我們直接對輸入的資料元素進行變化,使用指標變數或陣列可以進行位址傳遞。不懂的話參考鏈結函式傳值
flag則用於監控當前待排序的部分是否為公升序,如果是的話,則代表已經排好序了,不需要進行後續操作。直接返回。
主程式中給出了乙個具體的陣列例子,並且將其首位址傳入了排序函式中,函式直接對位址所儲存的元素進行交換和比較。
//公升序氣泡排序演算法,將前n個數中的最大值通過兩兩交換置於n
//再將前n-1個數中的最大者置於n-1位,以此類推
//如果在這個過程中,前x個數順序正確,則無需排序或交換,退出程式
#include
using
namespace std;
//不然需要將cout變成std::cout
void
bubblesort
(int
*a,int n)}}
}int
main()
;int n=
sizeof
(a)/
sizeof
(a[0])
;//sizeof用來計算資料所佔位元組數
bubblesort
(&a[0]
,n);
for(
int i=
0;i) cout
}
c 之氣泡排序
c 中提倡使用vector來儲存元素 公升序 這裡 降序同理 氣泡排序 比較前後兩個,第一趟之後,最後乙個數肯定是最大的,第二趟比較將少乙個數的比較,第二趟之後,倒數兩個數完成排序 第三趟比較將少兩個數的比較,第三趟之後,倒數三個數完成排序 include include includeusing ...
c 之氣泡排序
可以解決問題 有一組長度為10取值範圍為0到10的隨機數 random random new random int arr new int 10 for int i 0 i arr.length i 從小到大排序 方法 把陣列arr中所有的數都與他們後面的數進行比較,如果後面的數較小則讓他們兩個交換...
C 之氣泡排序
氣泡排序 bubble sort 重複地走訪要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 錯誤,就把他們交換過來。走訪元素的工作是重複地進行,直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端 公升序或降序...