1.代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int n, a[1000], j, i, tem;
scanf("%d\n", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < n - 1; i++)
{ //通过循环控制冒泡次数
for (j = 0; j < n - i - 1; j++)
{
if (a[j] > a[j + 1]) //降序为小于
{ //前一个大于后一个,两者交换
tem = a[j];
a[j] = a[j + 1];
a[j + 1] = tem;
}
}
}
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
2.理解
升序从第一位开始进行相邻两位的比较,
若大则后移继续与下一位进行比较,
直至比较出最大值排在最后,
在从第一位开始,排出第二大值,以此类推。
降序相同,依次排出最小值。
3举例
假设一个数组 a[11] = { 20, 5, 30, 15, 40, 42, 10, 9, 33, 11, 98}进行升序
选出最大的:5,20,30, 15, 40, 42, 10, 9, 33, 11, 98; | |
选出第二大的:5,9,30, 15, 40, 42, 10,20,33,11,98; | |
选出第三大的:5,9,10,15,40,42,30,20,33,11,98; | |
选出第四大的:5,9,10,11,40,42,30,20,33,15,98; | |
选出第五大的:5,9,10,11,15,42,30,20,33,40,98; | |
选出第五大的:5,9,10,11,15,20,30,42,33,40,98; | |
选出第六大的:5,9,10,11,15,20,30,42,33,40,98; | |
选出第七大的:5,9,10,11,15,20,30,33,42,40,98; | |
选出第八大的:5,9,10,11,15,20,30,33,40,42,98; | |
选出第九大的:5,9,10,11,15,20,30,33,40,42,98; | |
选出第十大的:5,9,10,11,15,20,30,33,40,42,98。 | |