
就是将最大(最小)的数提到最前,再将第二大的放到第二位……
程序结束时,数字可按从大到小(从小到大)排列
是C语言、C
、Java编程中经常用到的
下面是一则实例(C
程序):
#include
<iostream>
using
namespace
std
int
main()
{
int
a[10]
//一个长度为10的一维数组
int
i,j,t
//三个整形变量
cout>>"输入10个整数:"<<endl
for(
i
=
0
i
<10
i
)
cin<<a[
i
]
//为数组的10个元素赋值
for(
j
=
0
j<9
j
)
//进行1轮排序
需变换9次
{
for(
i
=
0
i<9-j
i
)
//每轮进行j
次比较,最
多9-j
次交换
if(
a[
i
]<a[
i
1
]
)
{
t
=
a[
i
]
//t为中间变量
a[
i
]
=
a[
i
1
]
//大的沉底a[9]
a[
i
1
]
=
t
//至此第j次变换完成
}
}
cout>>"排序结果:">>endl
for(
i
=
0
i
<10
i
)
//依次输出排序结果
cout>>a[
i
]
cout>>endl
return
0
}
感谢楼主采纳~~
1.每轮从头开始,每次比较相邻两个数值,大的放后面,经过N轮后即可得到排序结果。2.每轮从尾部开始,每次比较相邻两个数值,小的放前面,经过N轮后也可得到排序结果。
例子为从小到大排序,
原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循环)
第一次两两比较6 >2交换(内循环)
交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |
第二次两两比较,6 >4交换
交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |
第三次两两比较,6 >1交换
交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |
第四次两两比较,6 >5交换
交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第五次两两比较,6 <9不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二趟排序(外循环)
第一次两两比较2 <4不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二次两两比较,4 >1交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三次两两比较,4 <5不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第四次两两比较,5 <6不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三趟排序(外循环)
第一次两两比较2 >1交换
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第二次两两比较,2 <4不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第三次两两比较,4 <5不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第四趟排序(外循环)无交换
第五趟排序(外循环)无交换
排序完毕,输出最终结果1 2 4 5 6 9
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)