关于求时间的问题,求解

从问题是快排,但是为什么我的快排时间一直是0.00000,用了time.h和clock,而且调试过程中end和start都有显示,直到t的时候结果是正确的 是,输出就输出0.0000

img

img

我印象中把这个串代码和这个问题放到GPT里面,就可以给出详细的解决的方式方法,
你看看能不能把这个问题看他怎么回答

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    可能的原因有:

    1. 程序运行时间太短,不足以被time.h所测量到。

    2. 测量代码逻辑错误,start和end的计时程序不准确。

    3. 输出结果的格式化错误,没有使用正确的格式化字符串。

    解决方案:

    1. 增加相应的数据样本或函数操作,以便程序运行时间更长,让其能够被time.h测量到。

    2. 确保start和end标记时间的代码逻辑正确,比如避免在需要计时的代码段之外插入其他程序逻辑,造成计时错误。

    3. 请检查输出结果的格式化,确保使用正确的格式化字符串,比如 "%lf" 表示 double 类型,而 "%d" 表示整型。

    以下是一份可能的解决方案:

    #include <time.h>
    #include <stdio.h>
    
    void quick_sort(int arr[], int low, int high);
    int partition(int arr[], int low, int high);
    
    int main() {
        int arr[] = {10, 7, 8, 9, 1, 5};
        int n = sizeof(arr) / sizeof(arr[0]);
    
        clock_t start = clock();
        quick_sort(arr, 0, n - 1);
        clock_t end = clock();
        double t = ((double) (end - start)) / CLOCKS_PER_SEC;
    
        printf("Sorted array: ");
        for (int i = 0; i < n; i++)
            printf("%d ", arr[i]);
        printf("\nTime taken by sort function: %lf seconds", t);
        return 0;
    }
    
    void quick_sort(int arr[], int low, int high) {
        if (low < high) {
            int j = partition(arr, low, high);
            quick_sort(arr, low, j - 1);
            quick_sort(arr, j + 1, high);
        }
    }
    
    int partition(int arr[], int low, int high) {
        int pivot = arr[high];
        int i = (low - 1);
    
        for (int j = low; j <= high - 1; j++) {
            if (arr[j] < pivot) {
                i++;
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;
        return (i + 1);
    }
    

    这份代码中,quick_sort() 函数实现了快速排序算法,而 partition() 函数则是 partition 过程,具体实现可以参考快速排序的算法原理。在main() 中,我们在计时开始前先有一个前期工作,即赋值一个整型数组,数组长度为 n 。在计时结束后,将计时结果 t 格式化输出,并输出排序后的数组。此处注意,printf() 中的 "%lf" 表示以 double 类型输出浮点数,而 CLOCKS_PER_SEC 是常量,可以代表每秒的时钟嘀嗒数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^