演算法四之氣泡排序

2022-07-20 15:24:09 字數 1368 閱讀 5955

(1)氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

(2)氣泡排序演算法的運作如下:(從後往前)

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

簡單演算法:

public

static

void bubblesort(int

data) }}

}

優化演算法一:

public

static

void bubblesort(int

data)

}//一趟沒有交換,則退出

if(flag)

}}

優化演算法二:

public

static

void bubblesort(int

data)

}

}}

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數

和記錄移動次數

均達到最小值:

,。所以,氣泡排序最好的時間複雜度為

。若初始檔案是反序的,需要進行n-1 趟排序。每趟排序要進行n-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

氣泡排序的最壞時間複雜度為

。綜上,因此氣泡排序總的平均時間複雜度為

。最優的時間複雜度為:o( n2 ) ,有的說 o(n)這是經過優化的演算法; 最差的時間複雜度為:o( n2 ); 平均的時間複雜度為:o( n2 );

空間複雜度就是在交換元素時那個臨時變數所佔的記憶體空間,最優的空間複雜度就是開始元素順序已經排好了,則空間複雜度為:0;最差的空間複雜度就是開始元素逆序排序了,則空間複雜度為:o(n);平均的空間複雜度為:o(1);

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

排序演算法之四 改進的氣泡排序

以下純屬個人原創,歡迎各路大神指點迷津 首先是沒有經過優化的氣泡排序演算法 public static void bubblesort int a 這種排序的時間複雜度很顯然是n2 以下是我乙個想法,當然測試也是成功的進行了排序。思路主要是每次遍歷時不僅將最小的進行冒泡,同時通過記錄最大的元素的位置...

排序演算法四 交換排序之氣泡排序

在我的博文 主宰世界 的10種演算法短評 中給出的首個演算法就是高效的排序演算法。本文將對排序演算法做乙個全面的梳理,從最簡單的 冒泡 到高效的堆排序等。排序 將一組雜亂無章的資料按一定的規律順次排列起來。資料表 data list 它是待排序資料物件的有限集合。排序碼 key 通常資料物件有多個屬...

演算法 排序演算法之氣泡排序

排序演算法系列目錄說明 排序演算法簡介說明 1.定義 將一組雜亂無章的資料按一定的規律順次排列起來。例如 輸入 a1,a2,a3,an 輸出 a1 a2 a3 an 滿足a1 a2 a3 an 排列 2.演算法效能評估術語言 穩定 如果a原本在b前面,而a b時,排序之後a仍然在b的前面。不穩定 如...