2016-05-07 1 views
-1

に2つのソートされたリストをマージします。は、C++、私がソートされた形で一緒にこの2つのリストをマージしようとしていますどのように私はこのコードが動作するように得るか、

例:

LIST = 3,8,16,28,50,17,19,30,73,80

場合3,8,16,28,50右側 と17,19,30,73,80左側 は同じリストに含まれているが、2つの異なるリストとして近づきました。

これは私のコードです:

int main() 
{ 
    int first,last,m,temp, counter = 0,lsize = 11; 
    int a[lsize] = {3,8,16,28,50,17,19,30,73,80}; 

    for(int i = 0 ; i < lsize; i++) 
     cout<<a[i]<<" ,"; 
    cout<<"\n"; 

    first = 0; 
    last = lsize; 
    m = (first + last)/2; 
    int i = 0; 
    while(counter < lsize){ 

     if(a[first] < a[m+1] && m+1 < last){ 
      counter++;first++; 
     } 
     else if(a[m+1] < a[first] && first <= m){ 
      temp = a[m+1]; 
      shift(a,first,m+1); 
      a[counter]=temp; 
      counter++;first++;m++; 
     } 
     else if(m+1 > last && first <= m){ 
      a[counter]=a[first]; 
      first++;counter++; 
     } 
     else if(first > m && m+1 <= last){ 
      a[counter]=a[m+1]; 
      m++;counter++; 
     } 
    } 
    for(int i = 0 ; i < lsize; i++) 
     cout<<a[i]<<" ,"; 
    cout<<"\n"; 

return 0; 
} 

私は出力

3,8,16,17,19,28,30,50,65,73,73

としてこれを取得しておきます

ホープ誰かが私にはそれが間違って おかげ

+0

あなたは 'のstd :: inplace_merge'を見たことがありますか? – Jarod42

+0

あなたの出力にはどのように65がありますか?投稿したコードが出力と一致していますか? – Aenimated1

答えて

0

STLは、エラーを回避し、このような一般的なアルゴリズムをデバッグする時間を無駄に支援することがあります。

std::vector<int> listA {3,8,16,28,50}; 
std::vector<int> listB {17,19,30,73,80}; 
std::vector<int> result; 
std::merge(listA.begin(), listA.end(), listB.begin(), listB.end(), std::back_inserter(result)); 

それともJarod42が指摘するように、あなたは<algorithm>

std::vector<int> listA {3,8,16,28,50,17,19,30,73,80}; 
std::inplace_merge(listA, listA.begin()+5, listA.end()); 
0

を取得していますどこあなたはしかし、(LSIZE-1を0)あなたのprint文で11回ループしている、あなたのリストにある10個の要素(LSIZE)を持って指摘することができます。

0

で所定の位置にそれを行うことができ、あなたは変数ことはできません++

std::inplace_merge(std::begin(a), a + 5, std::end(a)); // a+5 is for 17. 

Demo

-1

Cを行うことができますサイズリスト。したがって、コードの2行目にエラーが発生するはずです。私はそれがどのように機能しているのかわかりません。第二に、LSIZEは、10の代わりに、11

+0

ありがとう、観測のために私はリストの65を逃した。 LIST [lsize] = {3,8,16,28,50,17,19,30,65,73,80}ここで、lsize = 11であったはずです。 – user2931378

0

おかげでたくさんの男でなければなりません! Iはまた、(条件)であれば第そうならば、次のように(条件)条件が欠落していることが分かった:それぞれから第三の状態であること

if(a[first] < a[m+1] && m+1 <= last && first <= m) 

else if(a[m+1] < a[first] && first <= m && m+1 <= last) 

関連する問題