最近需要用到氣泡排序,所以翻出來研究一下。氣泡排序的基礎其實就是元素交換,是一種極其簡單的排序演算法。
話不多說,直接上**:
1 #include 2以上是基礎版,下面來講一下原理。void bubble_sort(int arr, int
len)315
}16}17
}1819int
main () 20;
22int len = (int)sizeof(arr)/sizeof(arr[0
]);23
inti;
24bubble_sort(arr, len);
25for(i = 0; i < len; i++)
2629
return0;
30 }
首先初始化乙個陣列 arr = 我們需要從小到大對陣列元素進行排序,運用最簡單的元素交換步驟,比較相鄰兩個元素的大小,比較後,數值較大的往後移動。由此,兩兩比較多次後(這是一趟排序),數值最大的元素移動到陣列尾部。經過多趟排序之後,陣列元素將從小到大排列。
但是這樣的排序並不是最優選擇。因為按照以上的演算法,即使後面的資料已經排序完成,還是每一趟都要遍歷。以下是優化的演算法:
1 #include 2當然,氣泡排序還有更優化的方法:雞尾酒排序,這種方法特點是在排序的過程中是雙向進行的。程式如下:void bubble_sort(int arr, int
len)318
}19如果沒有元素交換,表示序列是順序狀態,退出迴圈
2023}24
}25intmain () 26;
28int len = (int)sizeof(arr)/sizeof(*arr);
29int
i;30
bubble_sort(arr, len);
31for(i = 0; i < len; i++)
3235
return0;
36 }
1 #include 2下圖是排序的模式,更直觀一點:3void cocktailsort(int arr, int
len);
4void swap(int *a, int *b);56
intmain () 7;
9int len = (int)sizeof(arr)/sizeof(*arr);
10int
i;11
cocktailsort(arr, len);
12for(i = 0; i < len - 1; i++)
1316
return0;
17}1819
void swap(int *a, int *b) //
交換兩元素的值
20
2627
void cocktailsort(int arr, int
len)
2841
}42 right--;
43for(i = right; i > left; i--) //
向左排序,確認最小元素
4450
}51 left++;52}
53 }
氣泡排序,最好的情況是序列已經是正序,時間複雜度為o(n),最壞的當然是逆序,時間複雜度為o(n^2),另外氣泡排序需要乙個空間作為資料交換的臨時儲存單元,因此空間複雜度為o(1)。
氣泡排序以及優化
排序 1.穩定的排序演算法 2.不穩定的排序演算法 3.比較排序 元素之間的次序依賴它們之間的比較,每個數需要與其他數進行比較才能確定自己的位置。比較典型的比較排序有快速排序,歸併排序,堆排序,氣泡排序。4非比較排序 非比較排序只要確定每個元素之前的已有元素個數即可,經過一次遍歷便可以解決。排序 1...
氣泡排序以及優化
氣泡排序是新手小白學的第乙個排序方法,複雜度很高。那麼如何在氣泡排序的基礎上對其進行優化?我們給一組資料 9,5,6,7,5,3 第一次冒泡 9和5交換位置 5,9,6,7,5,3 9和6交換位置 5,6,9,7,5,3 9和7交換位置 5,6,7,9,5,3 9和5交換位置 5,6,7,5,9,3...
氣泡排序以及氣泡排序的優化
很早接觸過氣泡排序法,但一直沒有真正的理解,只是為了記住而學習,今天又重新看了一下,其實氣泡排序法第一次排序會把最大的冒到最上面,第二次會把次大的泡冒到最大的後面,一次類推 另外在排序的次數上會逐漸減少。看 void bubble sort int a,int n 其實還可以優化一下,當發現沒有進行...