2016-04-27 9 views
2

Cのプログラミングに慣れていないので、配列の値を変更しないようにする方法があるのだろうかと思います。C - 並べ替え時のint配列の値を変更しない方法

私は配列があります。私が呼ぶとき

sortingMethod1(array); 

int *array = makeArray(); 

それから私は、この配列にソート方法を適用し

sortingMethod2(array); 

リストがすでにソートされており、私は2番目のソート方法をベンチマークする方法がありません。

同じ配列を両方の関数に渡して次の関数をソートせずに渡す方法があるかどうかを知りたいと思います。

誰かが非常に簡単な質問であると思われるものを手伝ってくれたら、私はそれを感謝します。

+0

アレイの作成方法は? 'malloc()'経由で? 'static'変数を返すだけですか? – Leandros

+0

すでに答えが見つかりましたが、mallocで作成されていて、ランダムな大きさの(配列)変数をランダムintで返します。 – tester

答えて

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); 
+1

これはすばやく答えたものです。ありがとう! – tester

+3

@テスターあなたが好きな答えを「受け入れてください」。それがSOの仕組みです! –

2

推奨されるように配列をコピーできます。 代わりに、元の配列のデータを指し示すポインターの追加配列を作成することもできます。並べ替えると、データが指し示されていますが、データ自体ではなくポインタの位置が変更されます。 メモリの面ではおそらく効率的でしょうか。

私は配列にデータやポインタをコピーすることなく、何らかのコピーを使用せずに配列を変更せずにソートする方法を知らない。 Cでは、配列はメモリへのポインタと非常に似ています。

関連する問題