冒泡排序(C)

冒泡排序

  記得當時學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)

~~ 覺得圖不錯的朋友點個贊支持下原創唄 ^ _ ^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章