算例1
- 题目描述
- 解题思路
①冒泡排序的时间复杂度为O(待排序个数的平方),在这里是O(n^2),且1<=n<=100,故此题数量级在万级别,符合要求
②冒泡排序的空间复杂度为O(1)【改】,没超过限制条件,符合要求
- 解题代码
#include <stdio.h>
void main(){
int n,A[100];
while(scanf("%d",&n)!=EOF){
for (int i=0;i<n;i++)
scanf("%d",&A[i]);
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++){
if (A[i]>A[j]){
int temp;
temp=A[j];
A[j]=A[i];
A[i]=temp;
}
}
for (int i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
}
}
- 注意点
①EOF与NULL的区别:
EOF值为-1,只是普通的整型常量,一般用于输入函数,比如scanf, 或者各种读文件操作函数等。当返回EOF时代表读函数出错,达到了文件尾
NULL值为0,是指针,一般用作指针操作,包括指针类型赋初始值,返回指针类型的函数在出错时的返回值等
(经测试,两者在这里都可以)
②在VC6.0中,退出for循环后,指示变量i依旧可见
③若输入的是字符串,且用的是gets()方法读入,则while循环判断改成while(gets(字符串变量))
算例2
- 题目描述
将原题条件修改n的取值为1<=n<=10000?
- 解题思路
时间复杂度已经查过了百万数量级,需要使用快速排序、归并排序等有更优复杂度的排序算法
c++已经为我们编写了快速排序的库函数
- 解题代码
#include <stdio.h></