氣泡排序及優化

2021-10-04 19:51:30 字數 1547 閱讀 1728

氣泡排序通常是最早接觸的一種排序

原理是:(假設是按照從小到大的順序排列)每一次遍歷都會把當前的最大值歸置到應有的位置,在下一次遍歷時忽略最後的已經歸置好的,在前面未排序的部分再次重複,每一次遍歷都不能少。

void

bubblea

(int num,

int size)

//size是陣列規模

在此基礎上加乙個判斷s,如果已經排好序(也就是沒有逆序出現),那麼就直接跳出迴圈了,所以假如這個函式從一開始就是排好序的,那麼上來第一次遍歷就可以跳出迴圈,但是bubblea是一次遍歷都不能少的

void

bubbleb

(int num,

int size)

}}

如果**的後一段是已經排好序的,那麼下列**可以檢測到最後一組逆序對出現的位置,並直接忽略掉最後面已經排好序的,縮小陣列規模,繼續檢測,所以這個是斷斷續續的,可能排著排著就出來一些順序的,就忽略,繼續排著排著又出來一些順序的…

所以如果陣列比較有規律一點,這個演算法效率會高一點。

void

bubblec

(int num,

int size)}}

}

以上三種氣泡排序的寫法的在最壞情況下的效率相同。並且優化後的在最好情況下時間複雜度也就線性的

下面是測試**:

#include

using

namespace std;

void

bubblea

(int num,

int size)

;void

bubbleb

(int num,

int size)

;void

bubblec

(int num,

int size)

;void

swap

(int

* q,

int* p)

intmain()

;int size =

sizeof

(num)

/sizeof

(int);

bubblea

(num, size)

;//bubbleb(num, size);

//bubblec(num, size);

for(

int i =

0; i < size; i++

) cout << num[i]

<<

" "

;return0;

}void

bubblea

(int num,

int size)

void

bubbleb

(int num,

int size)}}

}void

bubblec

(int num,

int size)}}

}

氣泡排序及優化

氣泡排序的基本思路是 每次將相鄰兩個數比較,將小的調到前頭 本例按照從小到大排序 按此規律如果有n個數,則要進行n 1趟比較。在第1趟比較中要進行n 1次兩兩比較,在第 j 趟比較中要進行 n j 次兩兩比較。實現如下 include define n 10 int main for i 0 i n...

氣泡排序及優化

只考慮演算法的實現 public static void version1 int array 如果陣列的某一部分本身就是有序的,能顯著減少迴圈的趟數 public static void version2 int array if flag break 分析 我們假設在進行某趟排序時已經有序了,以...

氣泡排序及優化

目錄 一 思路 二 普通寫法 三 模板寫法 四 優化一 五 優化二 六 優化三 氣泡排序 無序區,有序區 從無序區通過交換找出最大元素放到有序區前端。1 比較相鄰元素,如果第乙個比第二個大,交換他們。2 對每一對相鄰元素做同樣操作,從開始第一對倒最後一對。這步做完後,最後的元素是最大的。3 針對所有...