我需要测量一些排序算法的时间。问题在于某些函数(算法)可能具有2个参数(例如气泡排序)或3个参数(快速排序)。我不知道如何准备我的函数以接受两种类型的函数(2个参数和3个参数)。
我正在考虑向每个只有2个参数的函数添加一些默认参数,然后在我的get_time_calculations
中声明如下:
double get_time_calculations(void (*f)(int *, int, int), int *tab, int n) {
...
}
但是这种解决方案只是解决方法,也许有一种更好的方法可以做到这一点,而无需更改准备好的算法的论点?
我用来衡量函数执行时间的函数:
double get_time_calculations(void (*f)(int *, int), int *tab, int n) {
clock_t begin, end;
begin = clock();
f(tab, n);
end = clock();
randomize(tab, n, -100, 201);
return (double)(end - begin)/CLOCKS_PER_SEC;
}
还有我测试所有算法的功能:
void test1(int *ran_tab, int n) {
cout << endl << "Insert sort: " << get_time_calculations(insert_sort, ran_tab, n) << "ms" << endl;
cout << endl << "Bubble sort: " << get_time_calculations(bubble_sort, ran_tab, n) << "ms" << endl;
cout << endl << "Selection sort: " << get_time_calculations(selection_sort, ran_tab, n) << "ms" << endl;
cout << endl << "Quick sort: " << get_time_calculations(quick_sort, ran_tab, n) << "ms" << endl;
cout << endl << "Shell sort: " << get_time_calculations(shell_sort, ran_tab, n) << "ms" << endl;
cout<<endl<<"Heap sort: "<<get_time_calculations(heap_sort, ran_tab, n)<<"ms"<<endl;
}