通过循环展开,每次迭代将累加4个元素,减少了此枯渣循环次数,从而减少了总的执行时间(单独使用这种优化方法,对浮点数累败段乘几乎没有提高,但是整数累乘得益于编译器的重关联代码变化会有大幅度提高)。
这种优化可以直接利用编译器完成,将优化level设定到较高,编译器会自动进行循环展开。使用gcc,可以显式使用-funroll-loops选项。
1. 看你的算法效率,其实这个是核心2. 语意优化。
自己审查代码,哪些可以合并的,比如说命名一个循环即可解决,你非要写了两个循环分别来进行,这情况可以合并;
3. 减少new / delete 对
考虑采用内存池,自己编写管理模块。这举孝个看具体应用拦衫
4. windows接口的使用记得采用微软推荐的方式
5. 牺牲空间换取时间
用内存空间换取速度优势,这个你搜索下,有很多例子
------------------------------
还是建议你先审查自己的程序。。。确定瓶颈在哪了,再正衡稿谈优化!不然,会很盲目!
优化0:题目要求输入学生个数上限,所以乎旦雹输入n那里需要验证。
优化1:减少循环次数,题目没有说找最大最小必须单独循环。那么直接在输入循环的时候就能得结果。
优化2:你的j每次只循环一次,没有必要。
优化3:输入那里用临时变量传递,没必要,直接用数组地址。
优化4:数组最大值定义常量,便于后期程序修改参数。
下面代码,我完全按照你的写法写的,你拿来参考。(要是学过指针,比大小那里试试换成指针更好)
#include <stdio.h>
#define MS 40//最大学生人数
int main()
{
int n=0,i
int a[MS][2]
int minmark,maxmark,minxuehao,maxxuehao
while(!n || n>MS)
printf("请输入学生数量:"),scanf("%d",&n)
for(i=0i<ni++)
{
printf("请输入学生学号:")
scanf("%d",&a[i][0])
printf("请输入学生成绩:")
迟滚 岁帆 scanf("%d",&a[i][1])
if(i==0)
minmark=maxmark=a[0][1]
else{
if(minmark>a[i][1]) minmark=a[i][1],minxuehao=a[i][0]
if(maxmark<a[i][1]) maxmark=a[i][1],maxxuehao=a[i][0]
}
}
printf("最高分为%d,学号为%d\n",maxmark,maxxuehao)
printf("最高分为%d,学号为%d\n",minmark,minxuehao)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)