【发布时间】:2019-04-26 14:50:17
【问题描述】:
您好,我正在我的大学里做关于数据结构和算法的讲座。我正在做关于分析排序算法的任务。作业需要包含测量算法运行时间的报告。 TA给了我们30000个整数的三个数据集(升序、降序、随机)
我认为对降序数据进行排序比对随机排序的数据进行排序要多。但在我的冒泡排序算法中,结果却相反。
对数字进行降序排序需要 2.453 秒的实时时间和 2.409 秒的用户时间,对数字进行随机排序需要 3.217 秒的实时时间和 3.159 秒的用户时间。这个结果也与我的选择排序算法有关。降序数不是最坏的情况吗?
//file is opened at main function
int* bubble_prj4(FILE *fp_in)
{
int i, j, temp;
//arr is declared in header file
arr = (int*)malloc(sizeof(int) * 30000);
fread(arr, sizeof(int), 30000, fp_in);
for(i = 0; i < 29999; i++)
for(j = 29999; j > i; j--)
if(arr[j] < arr[j - 1])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
return arr;
}
这是我第一次在这里提问。我不知道我做得对。
【问题讨论】:
-
你在哪里看过? Wikipedia on Bubble Sort vs Insertion Sort vs Selection Sort——我现在正好在使用这些页面,所以我打开了标签。
-
那些时间有多可靠?您可能多次运行它们并获得了稳定的结果。您应该检查
fread()调用是否返回30000。 (我会在您的代码中添加两对大括号,每个for循环也有一对。) -
@JonathanLeffler 哦,我刚刚添加了这些大括号。我不明白你对
fread()的说法。 -
一般来说,您需要检查如果您希望读取 30,000 个整数,
fread()报告它实际上能够读取 30,000 个整数,而不是更小的整数。 -
哦,我明白了。我不太了解
fread()的返回。我刚刚通过 gdb 查过了。
标签: c time-complexity bubble-sort