1. 基本思想
(1) 核心
通過交換使相鄰的兩個數變成小數在前大數在後。
(2) 過程
1) 比較相鄰的元素,如果第一個比第二個大,就交換。
2) 這樣對數組的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就“沉”到數組第N-1個位置。
3) N=N-1, 如果N不爲0就重複前面二步,否則排序完成。
2. 算法實現(C語言)
void bubblesort(int arr[], int len)
{
int i, j;
for (i = 0; i < len; i++)//已經排好序的個數
for (j = 1; j < len-i; j++)//兩兩交換過程
if (arr[j-1] > arr[j])
swap(&arr[j-1], &arr[j]);
}
其中swap爲交換函數
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
3. 性能分析
(1) 時間複雜度:用基本語句執行次數的數量級來衡量
基本語句是比較和交換語句,平均時間複雜度是O(n^2)
(2) 空間複雜度
兩兩交換需要一個額外的空間,故空間複雜度爲O(1)。
(3) 穩定性
相鄰的兩個元素交換,相同元素之間的相對位置並沒有改變,故穩定。