冒泡排序,重複地走訪過要排序的數列,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。走訪數列的工做是重複地進行直到沒有再須要交換,也就是說該數列已經排序完成。算法
若文件的初始狀態是正序的,一趟掃描便可完成排序。所需的關鍵字比較次數和記錄移動次數均達到最小值:比較次數: n-1 ,移動次數爲0 。因此,冒泡排序最好的時間複雜度爲O(n) 。
若初始文件是反序的,須要進行趟n-1 排序。每趟排序要進行 n-i ((1≤i≤n-1))次關鍵字的比較,且每次比較都必須移動記錄三次來達到交換記錄位置。在這種狀況下,比較和移動次數均達到最大值:比較次數n*(n-1)/2 ,移動次數3n*(n-1)/2 。
冒泡排序的最壞時間複雜度爲O(n*n) 。
綜上,所以冒泡排序總的平均時間複雜度爲O(n*n) 。spa
冒泡排序就是把小的元素往前調或者把大的元素日後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。因此,若是兩個元素相等,不用交換一下的;若是兩個相等的元素沒有相鄰,那麼即便經過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,因此相同元素的先後順序並無改變,因此冒泡排序是一種穩定排序算法。code
#include <stdio.h> #define SIZE 8 void bubble_sort(int a[], int n); void bubble_sort(int a[], int n) { int i, j, temp; for (j = 0; j < n - 1; j++) for (i = 0; i < n - 1 - j; i++) { if(a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } } int main() { int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12}; int i; bubble_sort(number, SIZE); for (i = 0; i < SIZE; i++) { printf("%d", number[i]); } printf("\n"); }