在C语言函数中,如何计算一条函数总共耗费的时长
时间: 2024-04-12 13:28:02 浏览: 26
在 C 语言中,可以使用 clock 函数来计算一条函数的执行耗时。具体的做法是,在函数开始时调用 clock 函数记录开始时间,在函数结束时再次调用 clock 函数记录结束时间,然后计算两个时间之间的差值。
下面是一个示例代码:
```c
#include <stdio.h>
#include <time.h>
void myFunction() {
// 记录开始时间
clock_t start = clock();
// 执行函数的代码
// 记录结束时间
clock_t end = clock();
// 计算耗时 (单位为毫秒)
double duration = (double)(end - start) * 1000 / CLOCKS_PER_SEC;
printf("函数执行耗时: %.2f 毫秒\n", duration);
}
int main() {
myFunction();
return 0;
}
```
在上述代码中,使用 clock 函数分别记录函数开始和结束时的时间点,然后计算两个时间点之间的差值,再将差值乘以 1000 得到毫秒级的耗时。最后通过 printf 函数打印出函数的执行耗时。注意,CLOCKS_PER_SEC 是 clock 函数的时间单位,表示每秒钟有多少个时钟计时单元。
相关问题
1.定义待排序表的长度为n。 2.初始化随机数发生器,产生n个随机数构成的顺序表。 3.创建输出排序表函数,取得系统时间函数,直接插入排序函数,冒泡排序函数,快速排序函数,直接选择排序函数,筛选函数,对排序函数,归并排序函数. 4.主程序调用各个排序函数,输出各排序算法对长度为n的顺序表进行排序所耗费的时间。用c语言写
下面是用C语言实现对长度为n的顺序表进行各种排序算法并输出排序所耗费时间的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 10000 //顺序表最大长度
//产生随机数填充顺序表
void initList(int list[], int n)
{
int i;
srand(time(NULL)); //初始化随机数发生器
for (i = 0; i < n; i++)
list[i] = rand() % 100; //产生0~99的随机数
}
//输出排序后的顺序表
void printList(int list[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", list[i]);
printf("\n");
}
//直接插入排序
void insertSort(int list[], int n)
{
int i, j, temp;
for (i = 1; i < n; i++)
{
temp = list[i];
j = i - 1;
while (j >= 0 && list[j] > temp)
{
list[j + 1] = list[j];
j--;
}
list[j + 1] = temp;
}
}
//冒泡排序
void bubbleSort(int list[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (list[j] > list[j + 1])
{
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
}
//快速排序
void quickSort(int list[], int left, int right)
{
int i, j, pivot, temp;
if (left < right)
{
i = left;
j = right;
pivot = list[left];
while (i < j)
{
while (i < j && list[j] >= pivot)
j--;
if (i < j)
{
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
while (i < j && list[i] <= pivot)
i++;
if (i < j)
{
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
list[i] = pivot;
quickSort(list, left, i - 1);
quickSort(list, i + 1, right);
}
}
//直接选择排序
void selectSort(int list[], int n)
{
int i, j, k, temp;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (list[j] < list[k])
k = j;
}
if (k != i)
{
temp = list[i];
list[i] = list[k];
list[k] = temp;
}
}
}
//堆排序
void heapSort(int list[], int n)
{
int i, temp;
for (i = n / 2 - 1; i >= 0; i--)
adjustHeap(list, i, n);
for (i = n - 1; i > 0; i--)
{
temp = list[0];
list[0] = list[i];
list[i] = temp;
adjustHeap(list, 0, i);
}
}
void adjustHeap(int list[], int i, int n)
{
int j, temp;
temp = list[i];
j = 2 * i + 1;
while (j < n)
{
if (j + 1 < n && list[j] < list[j + 1])
j++;
if (list[j] <= temp)
break;
list[i] = list[j];
i = j;
j = 2 * i + 1;
}
list[i] = temp;
}
//归并排序
void mergeSort(int list[], int left, int right, int temp[])
{
int mid, i, j, k;
if (left < right)
{
mid = (left + right) / 2;
mergeSort(list, left, mid, temp);
mergeSort(list, mid + 1, right, temp);
i = left;
j = mid + 1;
k = 0;
while (i <= mid && j <= right)
{
if (list[i] <= list[j])
temp[k++] = list[i++];
else
temp[k++] = list[j++];
}
while (i <= mid)
temp[k++] = list[i++];
while (j <= right)
temp[k++] = list[j++];
for (i = 0; i < k; i++)
list[left + i] = temp[i];
}
}
//筛选排序
void shellSort(int list[], int n)
{
int i, j, gap, temp;
for (gap = n / 2; gap > 0; gap /= 2)
{
for (i = gap; i < n; i++)
{
temp = list[i];
for (j = i - gap; j >= 0 && list[j] > temp; j -= gap)
list[j + gap] = list[j];
list[j + gap] = temp;
}
}
}
int main()
{
int list[MAXSIZE], temp[MAXSIZE];
int n = 10000; //待排序表的长度
clock_t start, end;
double duration;
initList(list, n);
printf("原始顺序表:\n");
printList(list, n);
start = clock();
insertSort(list, n);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("直接插入排序后的顺序表:\n");
printList(list, n);
printf("直接插入排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
bubbleSort(list, n);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("冒泡排序后的顺序表:\n");
printList(list, n);
printf("冒泡排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
quickSort(list, 0, n - 1);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("快速排序后的顺序表:\n");
printList(list, n);
printf("快速排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
selectSort(list, n);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("直接选择排序后的顺序表:\n");
printList(list, n);
printf("直接选择排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
heapSort(list, n);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("堆排序后的顺序表:\n");
printList(list, n);
printf("堆排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
mergeSort(list, 0, n - 1, temp);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("归并排序后的顺序表:\n");
printList(list, n);
printf("归并排序所耗费的时间为:%lf秒\n", duration);
initList(list, n);
start = clock();
shellSort(list, n);
end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("希尔排序后的顺序表:\n");
printList(list, n);
printf("希尔排序所耗费的时间为:%lf秒\n", duration);
return 0;
}
```
程序中定义了一个`MAXSIZE`常量表示顺序表的最大长度,`initList()`函数用于产生随机数填充顺序表,`printList()`函数用于输出排序后的顺序表。接下来分别实现了直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序和希尔排序算法。主程序调用各个排序函数,输出各排序算法对长度为n的顺序表进行排序所耗费的时间。
我如果不使用c语言标准库函数,那我如何达到和这个函数相同的效果
您可以使用自己编写的函数或者引用第三方库来达到相同的效果。例如,如果您需要实现字符串拷贝的功能,您可以编写自己的字符串拷贝函数,也可以引用第三方库中的字符串拷贝函数。但是,自己编写的函数可能需要耗费更多的时间和精力来进行优化和测试,因此需要权衡利弊选择最适合自己的方式。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)