排序 氣泡排序(Bubble sort)

2021-10-02 12:32:42 字數 2325 閱讀 7676

氣泡排序是一種較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

假設我們有乙個數列,初始值為[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48],使用氣泡排序過程如下圖所示。

從這個動畫過程中,我們可以看到:

第一次氣泡排序完成後,最大值50到達數列的最右邊。

第二次氣泡排序完成後,次大值48到達數列的次右邊。

以此類推。

關鍵字比較次數記為c,記錄移動次數記為m。

假設數列本身是正序的,那麼一趟掃瞄即完成排序。

假設數列本身是反序的,需要

綜上所述,氣泡排序總的平均時間複雜度為

每次移動記錄的時候,需要乙個附件的空間。所以,氣泡排序的空間複雜度為

氣泡排序演算法是穩定的。

因為,氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變。

#define arr_len 255 /*陣列長度上限*/

#define elemtype int /*元素型別*/

void bubblesort (elemtype arr, int len) }}

}

using namespace std;

template//整數或浮點數皆可使用

void bubble_sort(t arr, int len) }}

}

def bubble_sort(nums):

for i in range(len(nums) - 1): # 這個迴圈負責設定氣泡排序進行的次數

for j in range(len(nums) - i - 1): # j為列表下標

if nums[j] > nums[j + 1]:

nums[j], nums[j + 1] = nums[j + 1], nums[j]

return nums

public static void bubblesort(int arr) 

} }}

在oi比賽或者程式設計中,必須掌握冒泡演算法,因為這是最簡單、最基本的排序演算法。

在乙個舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。乙個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉180度,則可以把相鄰兩節車廂的位置交換,用這種方法可以重新排列車廂的順序。於是他就負責用這座橋將進站的車廂按車廂號從小到大排列。他退休後,火車站決定將這一工作自動化,其中一項重要的工作是編乙個程式,輸入初始的車廂順序,計算最少用多少步就能將車廂排序。

有兩行資料,第一行是車廂總數n(不大於10000),第二行是n個不同的數表示初始的車廂順序。

乙個資料,是最少的旋轉次數。

4

4 3 2 1

6
從題目可知,就是查詢逆序對。輸入為4 3 2 1,可以知道,逆序對有(4, 3)、(4, 2)、(4, 1)、(3, 2)、(3, 1)和(2, 1),合計一共6對,所以答案為6。

可以利用氣泡排序,對輸入資料進行排序,記錄調整順序的次數,即為本題結果。

由於本題是乙個模板題,所以資料量比較小,大小為1,000。使用氣泡排序,時間複雜度為

如果資料集進一步擴大,那麼氣泡排序就力不從心了,主要是因為時間複雜度太大,必須使用時間複雜度為

#include using namespace std;

int bubble_sort(t arr, int len) }}

return ans;

}const int maxn = 1e3;

int data[maxn] = {};

int main()

cout << bubble_sort(data, n) << endl;

return 0;

}

氣泡排序 排序 氣泡排序

既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...

氣泡排序 氣泡排序法

冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...

排序 氣泡排序

氣泡排序 氣泡排序 bubble sort 是一種 電腦科學 領域的較簡單的 排序演算法 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小...