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

tes*_*ter 2 c arrays

我是C编程的新手,想知道是否有办法防止更改数组的值.

我有一个数组:

int *array = makeArray();
Run Code Online (Sandbox Code Playgroud)

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

sortingMethod1(array);
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

sortingMethod2(array);
Run Code Online (Sandbox Code Playgroud)

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

我想知道是否有一种方法可以将相同的数组传递给两个函数,而无需为下一个函数排序.

如果有人能帮我解决一个非常简单的问题,我会很感激.

use*_*342 5

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

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);
Run Code Online (Sandbox Code Playgroud)

  • @tester请"接受"你喜欢的最佳答案.这就是SO的工作方式! (3认同)