bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽**,之後做兩點小的優化。
1.基礎版本bubblesort
2.優化-有序停止# 原始版的bubblesort
# 時間複雜度為o(n^2)
function bubblesort(array x, int
length)
for (int i = 0; i < length; i++)
for (int j = 0; j < length - 1 - i; j++)
if (x[j] > x[j+1])
swap(x[j], x[j+1];
3.優化-後半部有序,減少比較次數# 如果幾個交換後序列已經有序,則停止。
# 即在本次迴圈中,沒有發生元素交換,則已經有序。
function bubblesort(array x, int
length)
int issorted = true;
for (int = 0; i < length; i++)
issorted = true;
for (int j = 0; j < length - 1 - i; j++)
if (x[j] > x[j+1])
swap(x[j], x[j+1]);
issorted = false;
# 未發生過元素交換,已經有序。
if (issorted == true)
break;
參考自:# 如果元素後半部分已經有序,則會進行多次無意義的比較。
function bubblesort(array x, int
length)
int issorted = true;
int lastchangeindex = 0;
int sortedborder = length - 1;
for (int i = 0; i < length; i++)
issorted = true;
for (int j = 0; j < sortedborder; j++)
if (x[j] > x[j+1])
swap(x[j],x[j+1]);
issorted = false;
lastchangeindex = j;
sortedborder = lastchangeindex;
if (issorted == true)
break;
氣泡排序及其優化
然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...
氣泡排序及其優化
課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....
氣泡排序及其優化
部分使用了utils類,定義在這篇文章中有說明。核心 c 實現 void bubblesort int a,int n for int i n 1 i 0 i 試想一下,如果待排序的序列是 1,2,3,4,5,6,7,9,8 也就是倒數第一和倒數第二個關鍵字需要交換,別的都已經是正常順序,當i 1時...