C語言中氣泡排序演算法詳解

2022-10-04 11:30:08 字數 1363 閱讀 9766

目錄

比較相鄰兩個元素,如果第乙個比第二個大則交換兩個值。遍歷所有的元素,每一次都會將未排序序列中最大的元素放在後面。假設陣列有 n 個元素,那麼需要遍歷 n - 1 次,因為剩下的乙個元素一定是最小的,無需再遍歷一次。因此需要兩層迴圈,第一層是遍歷次數,第二層是遍歷未排序陣列。

**如下:

黃色部分表示已排好序的陣列,藍色部分表示未排序陣列

核心**如下:

/*** @brief 氣泡排序

* * @param arr 待排序的陣列

* @param size 陣列大小

*/static void bubble_sort(int *arr, int size)

if (!swapped) // 未交換則排序完畢,跳出迴圈

break;

}}布林值 swapped 是一種優化手段,在每次遍歷未排序陣列之前將其設定為 false 表示還未交換。如果遍歷完未排序陣列之後其值還是 false 則表示遍歷過程種沒有發生交換,也就是說陣列已經有序,無需再次遍歷,跳出迴圈。

時間複雜度:o(n2),兩層迴圈

空間複雜度:o(1),交換元素時只用了乙個臨時變數

最好情況:o(n),有序陣列遍歷一次後 swapped 為 false 退出迴圈

最壞情況:o(n2),陣列倒序

穩定性:穩定,比較兩個元素大小時不包括元素相等的情況,故相等元素的相對位置不變

/*** @file bubble_sort.c

* @date 2022-01-16

* @author pineapple ([email protected])

* * @brief 氣泡排序

*/#include

#include

#include

#include

#include

/** * @brief 交換函式

* * @param left 左邊的元程式設計客棧素

* @param right 右邊的元素

*/static inlwww.cppcns.comine void swap(int *left, int *rwww.cppcns.comight)

/** * @brief 氣泡排序

* * @param arr 待排序的陣列

* @param size 陣列大小

*/static void bubble_sort(int *arr, int size)

if (!swapped) // 未交換則排序完畢,跳出迴圈

break; }}

/** * @brief 測試函式

* */

static void test()

int main(void)

氣泡排序演算法 C 氣泡排序演算法排序詳解

氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...

C語言排序演算法 氣泡排序演算法

氣泡排序是一種交換排序,基本思想是 相鄰兩兩比較,若反序則交換。定義交換操作函式 1 void swap int p,int i,intj 2 基本排序演算法 思想 i 0時,p i 依次與後面的元素比較,如果後面的元素小,則交換位置,繼續比較,直到將最小的元素交換到第乙個位置,再從第二個開始與後面...

C語言 氣泡排序演算法

重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。void swap int a,int b int main int ...