十大排序
冒泡排序
對於數組[5,9,3,1,2,8,4,7,6]
5 9 3 1 2 8 4 7 6
第一輪比較
首先比較7和6
因爲6<7
所以交換位置,交換後變成[5,9,3,1,2,8,4,6,7]
接着比較6和4
因爲4<6,位置不變,[5,9,3,1,2,8,4,6,7]
再接着比較4和8
因爲4<8,交換位置,交換後變成[5,9,3,1,2,4,8,6,7]
接着比較2和4
因爲2<4,位置不變,[5,9,3,1,2,4,8,6,7]
按照這個過程,直到最小的那個數字,放在數組首位
此時數組爲[1,5,9,3,2,4,8,6,7]
第二輪比較
首先比較6和7
因爲6<7,位置不變,[1,5,9,3,2,4,8,6,7]
接着比較8還和6
因爲6<8,交換位置,交換後變成[1,5,9,3,2,4,6,8,7]
依次進行比較,直到2排到1的後邊
此輪比較結束,此時數組爲[1,2,5,9,3,4,6,8,7]
第三輪比較
經過第三輪比較,數組爲[1,2,3,5,9,4,6,7,8]
第四輪比較
經過第四輪比較,數組爲[1,2,3,4,5,9,6,7,8]
第五輪比較
經過第五輪比較,數組爲[1,2,3,4,5,6,9,7,8]
第六輪比較
經過第六輪比較,數組爲[1,2,3,4,5,6,7,9,8]
第七輪比較
記過第七輪比較,數組爲[1,2,3,4,5,6,7,8,9]
第八輪比較
經過第八輪比較,得出最終的排序[1,2,3,4,5,6,7,8,9]
冒泡排序總結
假如有N個數,那麼需要比較N-1次纔可以得出結果
每一輪的比較,都可以將最小的數排到最前面
冒泡排序代碼實現
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int num;
cin>>num;
int a[num];
memset(a,0,sizeof(a));
for (int i = 0; i < num; ++i) {
cin>>a[i];
}
for (int i = 0; i < num-1; ++i) {
for (int j = num-1; j > i; --j) {
int tmp;
if (a[j]<a[j-1]){
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
for (int i = 0; i < num; ++i) {
cout<<a[i]<<" ";
}
return 0;
}