我正在尝试测量冒泡排序10个大数字所需的时间。我将这些数字放在一个大小为10的数组中。然后,我将数字冒泡10次并打印出每次所用的时间。
问题在于,由于某种原因,所有即时通讯都是零!
以下是我的主要内容:
int n = sizeof(arr10)/sizeof(arr10[0]);
start=clock();
bubbleSort(arr10, n);
end=clock();
cpu_time_used = (double) (end - start) / CLOCKS_PER_SEC;
printf("Bubble Sort time= %f\n",cpu_time_used);
这是冒泡排序的功能:
void bubbleSort(int arr[], int n)
{
int i, j;
for (i = 0; i < n-1; i++)
// Last i elements are already in place
for (j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
答案 0 :(得分:2)
结果为零是probaby,因为clock()
的分辨率太低。有CLOCKS_PER_SEC
个刻度,CLOCKS_PER_SEC
为1000.您的示例可能在不到1000秒(小于1毫秒)内运行。
答案 1 :(得分:0)
使用%e
格式说明符打印秒数。最有可能发生的是这个数字很小,%f
只打印0
。
无论如何打印它,结果都是无用的,因为这么短的时间与测量算法无关,操作系统中的其他噪声将占主导地位。
测量10个数字的排序时间绝不会产生任何重要价值。尝试成千上万的数字。并且不要忘记在启用优化的情况下进行编译。