演算法優化
2.記錄最後進行數字交換的位置
3.雞尾酒排序
最終優化
氣泡排序是將一組數字從第乙個數開始到第(m(陣列長度)-k(迴圈次數)-1)數,一直與後一位數進行比較(從小到大排序),大的數放後一位,小的數放前一位,總共迴圈m(陣列長度)-1次。
//data是排序的陣列,length是陣列長度
intbubblesort
(int data,
int length)}}
return0;
}
氣泡排序其實就是每一次遍歷陣列找到最大(或最小)的數放到m(陣列長度)-k(迴圈次數)-1位(即陣列從尾到頭是從大到小排序),是比較次數和排序時間比較穩定是一種排序。
如果遍歷陣列的過程中沒有進行過數字交換,設定乙個標記,表示陣列已經排序好了,就不需要繼續進行遍歷。
記錄上次遍歷最後進行數字交換的位置,因為該位置後面的數字都是排序好的,就不需要繼續排序了。
雞尾酒排序又叫雙向氣泡排序,來回排序,比原來快一點,原理就是陣列的"正序"和"逆序"程度不同,有時候正向冒泡比較快,有時候反向冒泡比較快,兩種方向結合起來,吸收各自的優點和缺點,但是優點比較大。
例如:1.陣列2,3,4,5,1的情況下正向冒泡需要4次遍歷,反向冒泡1次遍歷
2.陣列5,1,2,3,4的情況下正向冒泡需要1次遍歷,反向冒泡4次遍歷
3.而以上兩種情況雞尾酒排序都只需要2次遍歷
不過如果陣列特別"逆序"的情況下,氣泡排序和雞尾酒排序效率都很差。
int
cocktailsort
(int
*data,
int length)
} right--
;//反向冒泡終點左進
for(j = right;j > left;j --)}
left++
;//正向冒泡終點右進
}}
將1,2,3點優化結合起來
int
cocktailsort
(int
*data,
int length)
}//right--; //反向冒泡終點左進
if(flag ==0)
else
flag =0;
//每一次遍歷開始標記是0
for(j = right;j > left;j --)}
//left++; //正向冒泡終點右進
可以明顯感覺得到效率提公升。
氣泡排序及其優化
然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...
氣泡排序及其優化
課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....
氣泡排序及其優化
bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽 之後做兩點小的優化。1.基礎版本bubblesort 原始版的bubblesort 時間複雜度為o n 2 function bubblesort array x,int length for int i 0 i le...