冒泡排序
記得當時學C語言時,對於冒泡排序,老師舉了一個挺生動的例子,到現在還記得,“重的往下沉,輕的往上冒,就像石頭丟入水中,石頭重往下沉,水泡輕向上浮,以此來形容冒泡排序”。算是非常形象了,下面就詳細描述下冒泡排序…
算法描述
假設:一個集合N【n】,長度爲n,現在進行冒泡排序
第一輪排序:取 i = 0 開始, 比較前後兩個元素的大小,“大的下沉,往後移位”,
即:如果N【i】> N【i+1】,則 temp = N【i】;N【i】= N【i+1】;N【i+1】= temp;
直到 i = n - 2(因爲元素從 0 位置開始,即 i < n - 1 終止遍歷),
當第一輪排序結束時,最後一個元素N【n-1】爲整個集合中的最大值,第二輪排序就少一個元素
第k輪排序:當進行第 k 輪排序時,需要排序的元素個數爲 n - 1 - k, 因爲最後 k 個元素已按序排列,
即: i < n - 1 - k ; 而對於 n 個元素的集合,需要排序 n - 1 次,即: k < n - 1(k = 0 開始)
示例代碼
下面就用C具體寫一下冒泡排序的實現
void bubble_Sort(int N[], int len)
{
int i, k, temp;
for(k = 0; k < len - 1; k++) { // 一共排序 len - 1 次
for(i = 0; i < len - 1 - k; i++) {
if(N[i] > N[i + 1]) { // 比較前後元素大小,大的後移
temp = N[i];
N[i] = N[i + 1];
N[i + 1] = temp;
}
}
}
}
測試結果
輸入 N[10] = {9, 22, 10, 8, 1, 0, 0, 6, 5, 3};
執行結果如下:將每次執行排序的過程打印出來
示例圖片較爲形象的展示了冒泡排序的過程,同直接插入排序一樣,冒泡排序空間複雜度爲O(1)
時間複雜度爲O(n^2)
~~ 覺得圖不錯的朋友點個贊支持下原創唄 ^ _ ^