氣泡排序的優化

2022-02-19 13:23:41 字數 1491 閱讀 1328

氣泡排序(英語:bubble sort,台灣另外一種譯名為:泡沫排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

#include #include using namespace std;

void bubblesort(int a, int size)}}}

int main();

const int size = sizeof(arr) / sizeof(int);

bubblesort(arr, size);

for(int i = 0; i < size; i++)

}}}

優化內層for迴圈:

考慮這樣一種情況:- - - - x x x * * * *, 其中-表示無序元素,x表示未進行排序操作就已經是有序狀態的元素,*表示進行排序操作後達到有序狀態的元素. 此次優化, 就是使內層for迴圈跳過x段元素, 僅對-段元素進行交換操作. 我們觀察x段的可以發現, 即使遍歷x段和右邊相鄰的一段(*段)的元素,不會發生交換操作(因為已經是有序的了), 也就是說,最後一次交換操作發生在x段的左邊相鄰的一段(-段)! 結論是,內層for迴圈僅需遍歷到最後一次交換發生的位置.

void bubblesort_2(int a, int size)

}}}

上面2次優化過程, 分別對內/外層for迴圈做了優化, 那麼可不可以將2次優化合併呢? 答案是肯定的! 我們深入考察一下優化 - 2的思路會發現, 其實優化 - 1只是優化 - 2的一種特殊情況: 如果全部元素都是有序的, 那麼不會發生交換, 也就是說,最後一次交換發生在下標為0的位置!

void bubblesort_3(int a, int size)

}}}

氣泡排序作為一種簡單但並不高效的排序演算法,可以對一些特殊情況下的內/外層for迴圈做優化,作出適當預判,使其今早終止交換操作,以提高效能。

C 氣泡排序 氣泡排序的優化

本文包含氣泡排序的三種實現方式 分別為氣泡排序初級版,公升級版,終級版 自己起的名字 使用時只要使用終極版就本以了,終級版為公升級版的優化版本 至於初極版和公升級版只是為了幫助理解 氣泡排序的時間複雜度為o n include include include include include incl...

氣泡排序以及氣泡排序的優化

很早接觸過氣泡排序法,但一直沒有真正的理解,只是為了記住而學習,今天又重新看了一下,其實氣泡排序法第一次排序會把最大的冒到最上面,第二次會把次大的泡冒到最大的後面,一次類推 另外在排序的次數上會逐漸減少。看 void bubble sort int a,int n 其實還可以優化一下,當發現沒有進行...

氣泡排序 優化後的氣泡排序

氣泡排序法 演算法原理 依次比較相鄰兩個元素的大小,若後面的比前面的小,則交換兩個元素的位置 對每一對相鄰元素作同樣的工作,從第一對到最後一對。進行一輪比較交換下來,最後的元素就會是最小的數了,這個數就不用參與後面的比較操作了 思路 遍歷陣列,對陣列中相鄰的兩個元素進行比較,如果需要公升序,前乙個資...