氣泡排序及其改進

2021-06-21 14:41:45 字數 850 閱讀 1140

氣泡排序作為最經典的演算法,雖然對大資料無用武之地。但是對於少量的資料,我們用氣泡排序,在時間複雜度上也是可以接受的,又因為它實現起來比較簡單,所以也經常的被人們使用。並且可以通過一些方法來改進最原始的氣泡排序,這種改進演算法的思路也有可取之處。

前一兩天參加宜搜科技的筆試,就考到了氣泡排序。我當時就想寫乙個改進之後的演算法。還是稍稍的考慮了一下的。所以現在整理一下,希望下次會更加的熟練。

氣泡排序的思路非常的簡單,即

將相鄰的兩個數相比較,將較大的數向後移動。我們可以知道每一次都會有乙個大數沉底。

下面我們來看最簡單的氣泡排序:

void swap(int *a,int *b)

//未改進的氣泡排序,其時間複雜度為o(n*n)

void bubble1(int a,int n)

我們稍微的思考一下,就可以找到一種改進方法。如果在一趟排序中沒有資料發生交換,那不就是說,資料已經有序了嗎。據此很容易寫出以下的**:

void bubble2(int a,int n)

} k--;

}}

還能改進嗎?我們可以通過記錄每趟發生交換的最後位置(後面的都已經有序了),來縮小需要比較的陣列長度。據此,容易寫出以下的**:

//在這個基礎之上還是繼續改進演算法的

//我們可以通過記錄每一趟排序最後發生交換的位置來縮小比較陣列的大小

//這樣,雖然改進比較小,但是思路非常的巧妙

void bubble3(int a,int n) }}

void printarray(int a,int n)

{ for(int i=0;i

氣泡排序及其改進

1.排序思想 氣泡排序也是非常簡單的排序演算法,易於理解。要點 1 也把陣列看作有序和無序部分,初始時將整個陣列視為無序 2 每次遍歷陣列中的無序部分,且兩兩比較,並將兩者中較大的元素置於後面一位,則一趟遍歷完成後,最大元素自然 沉到 無序部分的最後一位 3 減小無序部分的長度,迴圈第二步,直到陣列...

氣泡排序及其改進

1 比較相鄰的元素,前者大就交換 2 每對相鄰元素都比較 3 對所有元素都重複以上步驟 最後乙個元素不用 這個程式是正確的,可以將乙個陣列公升序排列,但如果給的陣列已經是公升序排列 例如a 這個時候再執行len 1趟就會浪費時間,所以給出了如下改進 define crt secure no warn...

氣泡排序及其改進演算法

第乙個排序函式 sort1 為氣泡排序的典型實現,第二和第三個為改進後的排序函式 include include define len 20000 double sort1 int int double sort2 int int double sort3 int int int main int ...