#include#includeusing namespace std;
//氣泡排序的特點:每一輪冒泡過後,在過去一輪遍歷中訪問過的元素中的最大元素
//一定會到達它最終應當處在的位置。
//基礎版本的氣泡排序:雙迴圈。外層迴圈控制冒泡次數,內層迴圈實現每一輪的
//冒泡處理:先進行元素比較,再進行元素交換。
void bubblesort_1(vector&nums)
} }return;
}//第一種版本的氣泡排序的問題是:序列可能會提前達到有序,所以該版本會出現不必要的時間開銷,
//所以第二種版本的優化思路是:記錄每輪冒泡過程中是否出現元素交換,若無,說明序列已有序,結束排序。
void bubblesort_2(vector&nums)
} //若issorted=true,說明已有序,故跳出迴圈,排序結束
if(issorted)
}} //按照前兩種方法的邏輯,每輪冒泡結束後,序列最右側會形成乙個有序區,且有序區的長度等於冒泡截止到當前所進行的輪數
//但是實際上右側的有序區的長度可能會大於輪數,因此會有不必要的比較發生,造成時間上的浪費。所以,針對此問題提出的優化方案是:
//維護乙個變數,記錄下無序數列的邊界,邊界往後就是有序區
void bubblesort_3(vector&nums)
} //更新無序區的邊界
sortborder=lastexchangeindex;
if(issorted)
}} void printarray(vectornums)
bubblesort_1(nums_1);
//列印排序後的nums_1
printarray(nums_1);
bubblesort_2(nums_2);
//列印排序後的nums_2
printarray(nums_2);
bubblesort_3(nums_3);
//列印排序後的nums_3
printarray(nums_3);
return 0;
}
C 氣泡排序及其優化
1 氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。2 演算法原理 namesp...
python實現氣泡排序及其優化
氣泡排序是排序演算法中比較基礎的部分,簡單原理就是 將數量大小比作輕重不同的氣泡,輕的氣泡會冒到重的氣泡之上的思想 最原始的排序 如下 def bubblesort numlist ifnot len numlist return for i in range len numlist for j i...
氣泡排序及其優化
然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...