目錄氣泡排序(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個,以此類推。每一行的元素都從最左邊開始安放 生成的順序是從上往下,從左往右 兩個元素之間不能有空閒 堆的性質 小根堆與大根堆的定義 堆排序原理 堆頂元素 即二...