氣泡排序及其優化

2021-08-21 20:00:16 字數 1386 閱讀 5727

bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽**,之後做兩點小的優化。

1.基礎版本bubblesort

# 原始版的bubblesort

# 時間複雜度為o(n^2)

function bubblesort(array x, int

length)

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

for (int j = 0; j < length - 1 - i; j++)

if (x[j] > x[j+1])

swap(x[j], x[j+1];

2.優化-有序停止

# 如果幾個交換後序列已經有序,則停止。

# 即在本次迴圈中,沒有發生元素交換,則已經有序。

function bubblesort(array x, int

length)

int issorted = true;

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

issorted = true;

for (int j = 0; j < length - 1 - i; j++)

if (x[j] > x[j+1])

swap(x[j], x[j+1]);

issorted = false;

# 未發生過元素交換,已經有序。

if (issorted == true)

break;

3.優化-後半部有序,減少比較次數

# 如果元素後半部分已經有序,則會進行多次無意義的比較。

function bubblesort(array x, int

length)

int issorted = true;

int lastchangeindex = 0;

int sortedborder = length - 1;

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

issorted = true;

for (int j = 0; j < sortedborder; j++)

if (x[j] > x[j+1])

swap(x[j],x[j+1]);

issorted = false;

lastchangeindex = j;

sortedborder = lastchangeindex;

if (issorted == true)

break;

參考自:

氣泡排序及其優化

然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...

氣泡排序及其優化

課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....

氣泡排序及其優化

部分使用了utils類,定義在這篇文章中有說明。核心 c 實現 void bubblesort int a,int n for int i n 1 i 0 i 試想一下,如果待排序的序列是 1,2,3,4,5,6,7,9,8 也就是倒數第一和倒數第二個關鍵字需要交換,別的都已經是正常順序,當i 1時...