2017-11-12 4 views
-4

降順に並べ2つのソート配列をマージする:私はこれらの配列をマージし、注文する必要C++ - 私は2つのアレイ有し順序

double *f = new double[5]; 
f[0] = 18.458; 
f[1] = 11.542; 
f[2] = 7.152; 
f[3] = 1.243; 
f[4] = -12.758; 

アレイ1:

e[0] = 21.145; 
e[1] = 17.152; 
e[2] = 15.541; 
e[3] = 0.095; 
e[4] = -10.515; 

がアレイ2 。ここに私のコードがありますが、それは逆の順序(昇順)で動作しています。私は配列のマージの降順で助けが必要です。私は演算子を置き換えようとしましたが、動作しません。私は間違っている?正しい符号付き

void mergeArrays(double * arr1, double * arr2, int n1, int n2, double * arr3){ 

    int i = 0, j = 0, k = 0; 

    while (i<n1 && j <n2) 
    { 
     if (arr1[i] < arr2[j]) 
      arr3[k++] = arr1[i++]; 
     else 
      arr3[k++] = arr2[j++]; 
    } 
    while (i < n1) 
     arr3[k++] = arr1[i++]; 

    while (j < n2) 
     arr3[k++] = arr2[j++];  
    } 
+0

http://idownvotedbecau.se/itsnotworking/ – user0042

+1

しないのはなぜ '場合( arr1 [i]> arr2 [j]) 'そのトリックをしますか?すべての '<'演算子を変更しようとしましたか? –

+0

@SudheeshSinganamallaはい、私はすべての<演算子>とそれを逆転しようとしました。その戻り値は-627743856220419248787898888839302069250 .. –

答えて

1

は、コードが正常に動作します:

#include <iostream> 

void mergeArrays(double * arr1, double * arr2, int n1, int n2, double * arr3) 
{ 
    int i = 0, j = 0, k = 0; 

    while (i<n1 && j <n2) 
    { 
     if (arr1[i] > arr2[j]) 
      arr3[k++] = arr1[i++]; 
     else 
      arr3[k++] = arr2[j++]; 
    } 
    while (i < n1) 
     arr3[k++] = arr1[i++]; 

    while (j < n2) 
     arr3[k++] = arr2[j++]; 
} 

int main() 
{ 
    double *e = new double[5]; 
    e[0] = 21.145; 
    e[1] = 17.152; 
    e[2] = 15.541; 
    e[3] = 0.095; 
    e[4] = -10.515; 
    double *f = new double[5]; 
    f[0] = 18.458; 
    f[1] = 11.542; 
    f[2] = 7.152; 
    f[3] = 1.243; 
    f[4] = -12.758; 
    double *g = new double[10]; 
    mergeArrays(e,f,5,5,g); 
    for(int i=0;i<10;i++) 
     std::cout<<g[i]<<std::endl; 
    delete e; 
    delete f; 
    delete g; 

    return 0; 
} 

結果:

21.145 
18.458 
17.152 
15.541 
11.542 
7.152 
1.243 
0.095 
-10.515 
-12.758 
関連する問題