2016-04-13 17 views
0

私は以下のコードで分かるように、これを行う方法について一般的な考えがあります。私が抱えている唯一の問題は交換部分を仕上げることです。基本的に、私がやろうとしているのは、最も低い変数の値を1番目の変数に、2番目の中間値を2番目の変数に、3番目の変数を3番目の変数に移動することです。ポインタとCとの交換

私はインターチェンジとテン​​ポラリーをどういう形で使っているのか知っていますが、どのようにして3つの値tempが何らかの形でオーバーライドされるため、それを完成させるでしょう。私は何が欠けていますか?だから基本的にa = 4.0, b = 7.0, c = 1.0c (1.0)aに入る必要があり、a (4.0)bに入る必要があり、b (7.0)cに入る必要があります。 ありがとう!

#include <stdio.h> 
void interchange(double * x, double * y, double * z); 

int main(void) 
{ 
    double a = 4.0, b = 7.0, c = 1.0; 

    printf_s("Originally a = %d, b = %d, and c = %d.\n", a, b, c); 
    interchange(&a, &b, &c); 
    printf_s("Now, a = %d, b = %d, and c = %d.\n", a, b, c); 

    return 0; 

} 

void interchange(double * x, double * y, double * z) 
{ 
    double temp; 

    temp = *z; 
    *y = *z; 
    * = temp 

    // what am I missing here? I cant get my head around this above ^^^ 

} 

ガイダンスのおかげで!

+1

ちょうどミニバブルソートを行いますzの最大値。次にxとyを比較し、最大をyに移動します。 – Unimportant

答えて

1

最も簡単な方法は次のとおりです。

if (*x > *y) { 
    temp = *x; // store value of x 
    *x = *y; // overwrite x with y 
    *y = temp; // overwrite y with x (which is in temp) 
} 
// now we sure that x <= y 
if (*y > *z) { 
    temp = *z; 
    *z = *y; 
    *y = temp; 
} 
// now we sure that x <= z and y <= z, but we don't know x/y relationships 
if (*x > *y) { 
    temp = *x; 
    *x = *y; 
    *y = temp; 
} 
// now x <= y <= z 
2

何かのように:、yに最大の価値を移動し、yにxを比較Zにyと比較し、移動:

void swap(double* first, double* last){ 
    double temp = *first; 
    *first = *last; 
    *last = temp; 
} 

void interchange(double * x, double * y, double * z){ 
    if(*x > *y) swap(x, y); 
    if(*y > *z) swap(y, z); 
    if(*x > *y) swap(x, y); 
}