八種基本的排序(1) 氣泡排序(C語言實現)

2021-08-21 14:29:50 字數 2023 閱讀 2726

目錄氣泡排序(bubble sort)

原理時間複雜度

演算法穩定性

源**+注釋

>>>我的部落格<<<

是一種電腦科學領域的較簡單的排序演算法。1

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

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

氣泡排序演算法的原理如下:

1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個,這樣是從小到大排。

(如果第乙個比第二個小,交換 , 那就是從大到小排)

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

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

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

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

c c

和記錄移動次數

m' role="presentation">m

m均達到最小值:cm

in=n

−1c mi

n=n−

1,mm

in=0

m mi

n=0。

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

n)o (n

)。

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

ax=n

(n−1

)2=o

(n2)

c ma

x=n(

n−1)

2=o(

n2)mm

ax=3

n(n−

1)2=

o(n2

) mma

x=3n

(n−1

)2=o

(n2)

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

n2) o(n

2)

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

n2) o(n

2)

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

下面就是源**了

函式版

//氣泡排序,從小到大(方向可改) 。

#include

void bubble_sort(int a, int n); //申明函式"bubble_sort"

int number[10000000]; //在主函式外面定義陣列可以更長

void bubble_sort(int a, int n) //下面是函式bubble_sort的程式

}}

}int main() //主函式

//ending

普通版
//當然這個版本是從小到大排的 

#include

int number[10000000];

int main()

}}

for (i=0;i1;i++)

printf("%d ",number[i]);

printf("%d\n",number[i]);

return0;}

//ending

C語言 排序(1) 氣泡排序 插入排序

1.氣泡排序 想象乙個大泡泡從上面往下掉,一直掉到比它更大的元素停止。也就是說從第乙個元素開始,比較它與第二個元素的大小,如果比第二個元素大則交換位置,否則保持不變,繼續與第三個元素比較,一直到最後乙個。這是第一輪排序 第二輪從第乙個元素出發,一直比較到倒數第2個,依次類推。void swap in...

C 八種基本排序 選擇排序(2)

選擇排序 原理 從頭至尾掃瞄序列,找出最小的乙個元素,和第乙個元素交換,接著從剩下的元素中繼續這種選擇和交換方式,最終得到乙個有序序列。思路 在長度為n的無序陣列中,第一次遍歷n 1個數,找到最小的數值與第乙個元素交換 第二次遍歷n 2個數,找到最小的數值與第二個元素交換 第n 1次遍歷,找到最小的...

C 八種基本排序 堆排序(6)

知識擴充 完全二叉樹的特點 從作為第一層的根開始,除了最後一層之外,第n層的元素個數都必須是2的n次方 第一層2個元素,第二層4個,第三層8個,以此類推。每一行的元素都從最左邊開始安放 生成的順序是從上往下,從左往右 兩個元素之間不能有空閒 堆的性質 小根堆與大根堆的定義 堆排序原理 堆頂元素 即二...