iOSでデータ交換を実現するいくつかの方法の紹介とその効率の比較

3109 ワード

2つのデータ交換はプログラミングでよく使用されます.たとえば、ソートアルゴリズムでよく使用されます.次に、よく使用される3つの方法を紹介し、交換に多く使用されるプログラムで効率を向上させるために、それらの効率を比較します.
1つ目の方法は、一時tempを使用します.コードは次のとおりです.
    int a1 = 3;
    int a2 = 5;
    int temp;
    temp  =  a1;
    a1  =  a2;
    a2  =  temp;

第2の方法は,追加の記憶領域を直接用いずに2つのデータ上で直接動作するが,この方法は2つの数を加算する際に境界を越える問題を生じる可能性がある.コードは次のとおりです.
    int b1 = 3;
    int b2 = 5;
    //b1 = b1 + b2
    //b2 = b1 + b2 - b2 = b1
    //b1 = b1 + b2 - (b1 + b2 - b2) =b2
    b1  =  b1  + b2;
    b2  =  b1  - b2;
    b1  =  b1  - b2;

3つ目の方法は、異演算子または演算子を使用することです.
    int c1 = 3;
    int c2 = 5;
    NSLog(@"     a=%d,b=%d",c1,c2);
//    a=a^b;
//    b=b^a;
//    a=a^b;
    c1 ^= c2;
    c2 ^= c1;
    c1 ^= c2;
    NSLog(@"    a=%d,b=%d",c1,c2);

//2017-11-13 14:36:19.610391+0800 arithmetic[7331:360857]変換前の値c 1=3、c 2=5 //2017-11-13 14:36:19.610558+0800 arithmetic[7331:360857]変換後のc 1=5,c 2=3
また、計算のコツ:同じように0を取り、同じように1を取ります.  実際には10進数の数値が使われていますが、2つの10進数の数値がどのように異や計算されているかを見てみましょう.  5 ⊕ 3 = ?  1.計算する前に数値をバイナリに変換します.  5と3からバイナリへの変換:0101、0011  0101  xor 0011  ————  結果0110  2.結果0110を10進数に変換する:6  3.だから5
私のプログラムで比較を実行すると、次の結果が得られます.
その結果,第1の方法は効率が最も高く,第1の方法は余分なメモリ空間を占めているが,交換された3行のコードはいずれも付与動作を実現し,相対的に後の2つの加減と異あるいはより速いことが分かった.したがって,交換量が大きい場合は,第1の方法が推奨され,速度が速く,最も理解しやすい.次は3つ目の方法が比較的速く、最も次は2つ目の方法ですが、2つ目の方法と3つ目の方法の効率はあまり違いません.