十大排序
冒泡排序
对于数组[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;
}