氣泡排序及其優化(C 實現)

2021-10-04 10:48:37 字數 1083 閱讀 5454

#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,預設為...