C - 如何在排序时不更改 int 数组的值

标签 c arrays

我是 C 编程的新手,想知道是否有一种方法可以防止更改数组的值。

我有一个数组:

int *array = makeArray();

然后我对这个数组应用排序方法:

sortingMethod1(array);

当我打电话时:

sortingMethod2(array);

列表已经排序,我无法对第二种排序方法进行基准测试。

我想知道是否有一种方法可以将同一个数组传递给两个函数,而无需为下一个函数对其进行排序。

如果有人能帮助我解决这个看似非常简单的问题,我将不胜感激。

最佳答案

如果排序方法就地对数组进行排序,您将需要向它们发送数组的副本。为避免代码重复,最好将复制提取到实用函数中:

void benchmark(int *array, size_t array_len, void (*method)(int *)) {
    int *array_copy = malloc(array_len * sizeof(int));
    memcpy(array_copy, array, array_len * sizeof(int));

    /* you can initialize a timer here */
    method(array_copy);
    /* you can output elapsed time here */

    free(array_copy);
}

// ...
int *array = makeArray();
benchmark(array, array_len, sortingMethod1);
benchmark(array, array_len, sortingMethod2);

关于C - 如何在排序时不更改 int 数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899902/

相关文章:

从主端更改伪 tty 回显模式

c - 在 C 中使用 FastCGI 访问 PUT 或 POST 请求的主体

javascript - 反向填充对象

arrays - 如何在 MATLAB 中对结构数组进行排序?

c++ - 从 C 访问 C++ 模板

c - 字符串 c 中的单词替换

c++ - 用指定范围内的随机数填充数组 (C++)

java - 将 String... 数组存储在二维数组中

java - 显示列表数组中的文件名差异 (Java)

c - #define 是否在行业标准中被禁止?