【发布时间】:2017-08-08 19:10:40
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void sort();
int main() {
int i;
for (i = 0; i < 100000; i++) {
sort();
}
}
void sort() {
int i, j, k, array[100], l = 99, m;
for (i = 0; i < 100; i++) {
array[i] = rand() % 1000 + 1;
}
for (k = 0; k < 99; k++) {
for (j = 0; j < l; j++) {
if (array[j + 1] > array[j]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
l--;
}
for (m = 0; m < 100; m++) {
printf("%d ", array[m]);
}
}
在 linux shell 上,gcc sort -o sort.c,然后是 time ./sort >> out。
在这里,如果我做gcc -o2 sort -o sort.c 和类似的o3 和o4,那么时间会继续减少。优化选项如何工作?请根据所有实时、用户时间和系统时间进行说明。
PS:代码可能有点低效。请忽略。
【问题讨论】:
-
不是
-O2、-O3和-O4优化选项(注意大写O)?所以你不会期望时间减少吗?我不确定我是否理解这个问题。而且我认为您没有执行gcc sort -o sort.c,因为这会尝试将sort编译为源并将二进制文件写入sort.c。我想你输入了gcc sort.c -o sort? -
换句话说:在执行时间方面,越少越好。
-
@lurker 抱歉,问题是 -o2、-o3 是如何工作的
-
-o2告诉编译器将其输出写入名为2的文件。-O2启用优化。它们是完全不同的选择;因为 gcc 的选项区分大小写。此外,如果您真的在使用-o sort.c,那么您正在破坏您的源文件。请更新您的问题,以明确您实际使用的是哪一个;复制并粘贴您的确切 shell 命令。 -
避免将变量命名为
l,因为它看起来与1过于相似,尤其是在使用程序员编辑器中使用的字体进行修复时。
标签: c sorting gcc bubble-sort