冒泡排序是一种比较快速的简单排序方法,他通过比较和交换相邻的两个数来达到排序的目的。
假设10个数分别是7,5,6,4,8,2,3,5,9,1,想要由大到小排列
1、比较第一二两个数7和5,7比5大,不用换
2、比较第二三两个数5和6,5比6小,要交换,序列变成了7,6,5,4,8,2,3,5,9,1
3、比较第三四两个数5和4,不动
4、比较第四五两个数4和8,要交换,序列变成了7,6,5,8,4,2,3,5,9,1
5、比较第五六两个数4和2,不动
6、比较第六七两个数2和3,要交换,序列变成了7,6,5,8,4,3,2,5,9,1
7、比较第七八两个数2和5,要交换,序列变成了7,6,5,8,4,3,5,2,9,1
8、比较第八九两个数2和9,要交换,序列变成了7,6,5,8,4,3,5,9,2,1
9、比较第九十两个数2和1,不动
一轮比较和交换后,最小的数字1,到达了第十位,前面的在排序就可以不考虑它了。
第二轮开始:序列初始是7,6,5,8,4,3,5,9,2,1
1、比较第一二两个数7和6,不动
2、比较第二三两个数6和5,不动
3、比较第三四两个数5和8,要交换,序列变成7,6,8,5,4,3,5,9,2,1
****
8、比较第八九两个数3和3,不动,序列变成7,6,8,5,4,5,9,3,2,1
这样8次之后,2到达了目标位,下面只要考虑前7个数了。
每次是ai和ai+1两个比较,那么第一轮i的范围是1-9,第二轮i的范围是1-8,第九轮
内层循环写作 :
for(j=1;j<=i;j++) if (aj<aj+1) swap
外层循环枚举i的值,写作for (i=9;i>=1;i--)
套在一起就是:
- #include <iostream>
- using namespace std;
- int a[11]= {0,7,5,6,4,8,2,3,5,9,1};
- int main()
- {
- for (int i=9; i>=1; i--) ///i控制内层循环的尾部
- for (int j=1; j<=i; j++)
- if (a[j]<a[j+1]) swap(a[j],a[j+1]);
- for (int i=1; i<=10; i++) cout<<a[i]<<' ';
- return 0;
- }
复制代码 |