氣泡排序通常是最早接觸的一種排序
原理是:(假設是按照從小到大的順序排列)每一次遍歷都會把當前的最大值歸置到應有的位置,在下一次遍歷時忽略最後的已經歸置好的,在前面未排序的部分再次重複,每一次遍歷都不能少。
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 針對所有...