資料結構 氣泡排序

2021-08-19 17:35:19 字數 2411 閱讀 5486

氣泡排序(bubble sort)一種交換排序。

基本思想:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。

以公升序冒泡為例:每趟排序過程中通過兩兩比較相鄰元素,將小的數字放到前面,大的數字放到後面。

核心**:

void bubblesort(int arr,int size)

} }}

完整**:

#include#includevoid bubblesort(int arr,int size)

printf("排序中:");

for(k = 0; k < size;k++)

printf("\n");

} printf("排序的結果:");

for(k = 0; k < size;k++)

printf("\n"); }}

int main();

int length;

int i, j;

length = sizeof(arr)/sizeof(arr[0]);

printf("排序前:\n");

演算法效能

時間複雜度

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數c和記錄移動次數m均達到最小值:cmin = n - 1, mmin = 0。所以,氣泡排序最好時間複雜度為o(n)。

但是上述**,不能掃瞄一趟就完成排序,它會進行全掃瞄。所以乙個改進的方法就是,當冒泡中途發現已經為正序了,便無需繼續比對下去。

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

cmax = n(n-1)/2 = o(n^2)

mmax = 3n(n-1)/2 = o(n^2)

氣泡排序的最壞時間複雜度為o(n^2)。

因此,氣泡排序的平均時間複雜度為o(n^2)。

總結:當資料越接近正序時,氣泡排序效能越好。

空間複雜度

o(1)

演算法穩定性

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。

所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

改進:

對氣泡排序常見的改進方法是加入標誌性變數flag,用於標誌某一趟排序過程中是否有資料交換。

如果進行某一趟排序時並沒有進行資料交換,則說明所有資料已經有序,可立即結束排序,避免不必要的比較過程。

核心**:

void bubblesort(int arr,int size)

} }}

完整**:

#include#includevoid bubblesort(int arr,int size)

printf("排序中:");

for(k = 0; k < size;k++)

printf("\n");

} if(false == flag)

printf("排序的結果:");

for(k = 0; k < size;k++)

printf("\n"); }}

int main();

//int arr =;

int arr = ;

int length;

int i, j;

length = sizeof(arr)/sizeof(arr[0]);

printf("排序前:\n");

資料結構 氣泡排序

起泡排序的過程很簡單。首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依次類推,直至第n 1個記錄和第n個記錄的關鍵字進行比較為止。上述過程稱作第一趟起泡排序,其結果使得關鍵字最大的記錄被安置到最後乙個記錄的位置上。然後進行...

資料結構 氣泡排序

氣泡排序演算法的基本思想是 假設待排序表長為n,從後往前 或從前往後 兩兩比較相鄰元素的值,若為逆序 即a i 1 a i 則交換它們,直到序列比較完。我們稱它為一趟冒泡,如果將最小的元素交換到待排序序列的第乙個位置 關鍵字小的元素往上 漂浮 這就是氣泡排序名字的由來 下一趟冒泡時,前一趟確定的最小...

資料結構 氣泡排序

目標效果 原始碼 include void print out int a,int n void bubble sort int a,int n int main printf 起泡排序 n printf 排序前 n printresult a,10 排序方法 bubblesort a,10 pri...