八大排序算法之冒泡法
冒泡排序(Bubble Sort),是一種計算機科學領域基本的排序算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。在不斷的遍歷過程中,大數不斷“沉底”,小數則不斷“上浮”,因此稱之爲冒泡法。
算法原理
- 依次比較數列中的相鄰元素,若當前元素數值大於後一個元素,則二者交換
- 單輪比較之後,數列中最大的數沉底,放置在數列的最後
- 重複上述比較,因大數已經沉底,故每次比較,最後一個不參與
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。此時大數沉底,小數上浮,形成有序數列
算法複雜度
最好的時間複雜度爲O(n)
最壞的時間複雜度,若初始文件是反序的,需要進行 n-1趟排序。每趟排序要進行 n-1-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,其時間複雜度爲O(n`2)
冒泡法排序是一種穩定的排序
算法實現
void Bubble(int *a,int n)
{
int i,j;
int temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(a[j+1]<a[j])
{
temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
測試代碼:
int main()
{
int i;
int a[11]= {2,1,6,5,8,3,2,9,48,4,-1};
Bubble(a,11);
for(i=0;i<11;i++)
printf("%d\t",a[i]);
return 0;
}
代碼測試通過。
這裏可以看到算法的動態演示。