Форум программистов, компьютерный форум CyberForum.ru

Слить два упорядоченных массива в третий - C++

Восстановить пароль Регистрация
 
Aleks fratriecz
3 / 3 / 0
Регистрация: 06.09.2012
Сообщений: 130
18.03.2013, 22:19     Слить два упорядоченных массива в третий #1
помогите чутка,надо слить два массива в один и упорядочить,создал два упорядоченых массива а как ввести их значения в 3ий не пойму
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
const int n = 5;
const int z = 10;
using namespace std;
 
void sort(int&,int&);
int main(int argc,char **argv)
 
{
    int *a,*b,*c,i;
    
   
    a = new int[n];
    for (int i=0;i<n;i++)
    {
        cout<<"Enter element a"<<(i+1)<<":";
        cin>>a[i];
    }
 
    for (int i=0;i<n;i++)
        for (int j=i;j<n;j++)
            sort(a[i],a[j]);
 
    for (int i=0;i<n;i++)
    {
        if (a[i]>=0)
            for (int j=i;j<n;j++)
                sort(a[j],a[i]);
    }
 
    for (int i=0;i<n;i++)
        cout<<(i+1)<<"="<<a[i]<<endl;
           delete [] a;
           
        
   
    b = new int[n];
    for (int i=0;i<n;i++)
    {
        cout<<"Enter element b"<<(i+1)<<":";
        cin>>b[i];
    }
 
    for (int i=0;i<n;i++)
        for (int j=i;j<n;j++)
            sort(b[i],b[j]);
 
    for (int i=0;i<n;i++)
    {
        if (b[i]>=0)
            for (int j=i;j<n;j++)
                sort(b[j],b[i]);
    }
 
    for (int i=0;i<n;i++)
        cout<<(i+1)<<"="<<b[i]<<endl;
           delete [] b;  
           
           
         
           
           
        c = new int[z];
     
   cout<<"elementy uporyad mass c :"<<a[n]<<b[n];
    
       
       
         
    
 
  
        for (int j=i;j<z;j++)
            sort(c[i],c[j]);
 
    for (int i=0;i<z;i++)
    {
        if (c[i]>=0)
            for (int j=i;j<n;j++)
                sort(c[j],c[i]);
    }
 
    for (int i=0;i<z;i++)
        cout<<(i+1)<<"="<<c[i]<<endl;
           delete [] c;   
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
    getchar();
    getchar();
 
    return 0;
}
 
void sort(int &a1,int &a2)
{
    if (a1>a2)
    {
        int t = a1;
        a1 = a2;
        a2 = t;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 22:19     Слить два упорядоченных массива в третий
Посмотрите здесь:

C++ Даны два массива, упорядоченных по возрастанию
Даны два упорядоченных массива. Слить их в третий, но чтобы элементы не повторялись C++
Обьединить два упорядоченных по возростанию массива в один также упорядочнный C++
C++ Объединить два упорядоченных по возрастанию массива в один. Нужны комментарии
Объединить два упорядоченных по неубыванию массива в один C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
3u3ik
 Аватар для 3u3ik
1 / 1 / 0
Регистрация: 18.03.2013
Сообщений: 12
18.03.2013, 22:31     Слить два упорядоченных массива в третий #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main()
{
     char a[] = "abc" , b[] = "defg";
     char *c = new char [strlen(a) + strlen(b) + 1];
 
     for(int i=0 ; i<strlen(a) ; i++)
         c[i] = a[i];
     for(int i=strlen(a) ; i<strlen(a)+strlen(b) ; i++)
         c[i] = b[i-strlen(a)];
     c[strlen(a) + strlen(b)] = '\0';
 
     puts(c);
 
     getch();
     return 0;
}
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
18.03.2013, 22:31     Слить два упорядоченных массива в третий #3
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
const int size1=10;
const int size2=10;
int arr1[size1]={1,2,3,4,5,6,7,8,9,0};
int arr2[size2]={10,11,12,13,14,15,16,17,18,19};
int arr3[size1+size2];
for(int i=0;i<size1;i++){
      arr3[i]=arr1[i];
}
for(int i=size1,j=0;i<size1+size2;j++,i++){
      arr3[i]=arr2[j];
}
Потом сортируй.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
18.03.2013, 22:36     Слить два упорядоченных массива в третий #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <algorithm>
#include <iterator>
#include <iostream>
#include <random>
#include <vector>
#include <array>
#include <ctime>
 
int main ()
{
    std::default_random_engine gen;
    std::uniform_int_distribution <> distr(0, 50);
 
    const int arraySize = 25;
    std::array <int, arraySize> fArray;
    std::cout << "First array: " << std::endl;
    std::generate(fArray.begin(), fArray.end(), [&] () -> int {
        return distr(gen);
    });
    std::copy(fArray.begin(), fArray.end(), std::ostream_iterator <int> (std::cout, " "));
 
    std::array <int, arraySize> sArray;
    std::cout << std::endl << "Second array: " << std::endl;
    std::generate(sArray.begin(), sArray.end(), [&] () -> int {
        return distr(gen);
    });
    std::copy(sArray.begin(), sArray.end(), std::ostream_iterator <int> (std::cout, " "));
 
    std::vector <int> tArray;
    std::set_union(fArray.begin(), fArray.end(), sArray.begin(), sArray.end(), std::inserter(tArray, tArray.begin()));
    std::cout << std::endl << "Third array: " << std::endl;
    std::sort(tArray.begin(), tArray.end());
    std::copy(tArray.begin(), tArray.end(), std::ostream_iterator <int> (std::cout, " "));
 
    return 0;
}
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
18.03.2013, 22:54     Слить два упорядоченных массива в третий #5
Ev[G]eN, это программа управляющая марсоходом?
Ev[G]eN
18.03.2013, 22:59
  #6

Не по теме:

Цитата Сообщение от egor2116 Посмотреть сообщение
Ev[G]eN, это программа управляющая марсоходом?
а что, сильно похоже?

BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
18.03.2013, 23:21     Слить два упорядоченных массива в третий #7

Не по теме:

egor2116, во-первых, такая программа написана на чистом Си, во-вторых, там строчек побольше, раз так в 5-6 тысяч.



Добавлено через 6 минут
Дабы не быть оффтопом посту, выложу и свой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
     std::vector<int> v1 = {1,2,7,3,6,5};
     std::vector<int> v2 = {6,4,2,4,5,4,7};
     std::copy(v1.begin(), v1.end(), std::back_inserter(v2));
     std::sort(v2.begin(), v2.end());
     std::copy(v2.begin(), v2.end(), std::ostream_iterator<int>(std::cout, " "));
     return 0;
}
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
19.03.2013, 00:06     Слить два упорядоченных массива в третий #8
Вставлю и свои 5 копеек
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
 
void sortCycleMerge(int *A, int n){
    int i,i1,i2,s,k;
    for (s=1; 1; s*=2){               // Размер группы кратен степени 2
        int nn=n/s;                   // Количество групп по s элементов
        if( n%s!=0 ){ nn++; }         // Остаток – есть неполная группа
        int n1=nn/2*s;                // Деление ближе к середине,
        int n2=n-n1;                  // но кратно размеру группы
        
        if (n1<=0 || n2<=0) { return; }       // Часть больше целого - выход
        int *B1=new int[n1],
            *B2=new int[n2];
        
        for (i=0; i<n1; i++){ B1[i]=A[i]; }   // Разделение на части
        for (i=0; i<n2; i++){ B2[i]=A[i+n1]; }
        i1=i2=0;
        for (i=0,k=0; i<n; i++){           // Слияние с переходом «скачком»
            if (i1==s && i2==s){            // при достижении границ обеих
                k+=s,
                    i1=0,
                        i2=0;            // групп
            }
            if (i1==s || k+i1==n1){ A[i]=B2[k+i2++]; }  // Достигла границы группы или
            else{ if (i2==s || k+i2==n2) { A[i]=B1[k+i1++]; }                       // массива
                else if (B1[k+i1 ] < B2[k+i2 ]) { A[i]=B1[k+i1++]; }      // Если нет – минимальный из пары
                   else A[i]=B2[k+i2++];
            }
                    
        }
        delete []B1; delete []B2;
    }
 }
 
void sortCycleMergeAB(int *a, int N, int *b, int M, int *c){
    sortCycleMerge(a, N); 
    sortCycleMerge(b, M);
    for (int i = 0, j = 0, k = 0; k < N+M; k++){
        if (i == N) { 
            c[k] = b[j++]; 
            continue; 
        }
        if(j == M){ 
            c[k] = a[i++]; 
            continue; 
        }
        c[k] = (a[i] < b[j]) ? a[i++] : b[j++];
    }
};
 
void main( void ){
    int A[] = {9,8,7,6,5,4};
    int B[] = {3,2,1,-1,0};
    int C[sizeof(A)/sizeof(int)+sizeof(B)/sizeof(int)];
 
    sortCycleMergeAB(A, sizeof(A)/sizeof(int), B, sizeof(B)/sizeof(int), C);
 
    for( int i = 0; i< sizeof(A)/sizeof(int)+sizeof(B)/sizeof(int); i++){
        printf("%d ",C[i]);
    }
    printf("\n");
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
19.03.2013, 00:54     Слить два упорядоченных массива в третий #9
А про специально придуманный для этого merge почему никто не сказал?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <algorithm>
#include <iterator>
#include <random>
#include <vector>
#include <cstddef>
 
typedef std::ostream_iterator<int> int_output;
 
int main()
{
    const std::size_t N = 10, M = 15;
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<int> uid(0, 99);
    std::vector<int> v1(N), v2(M), v3;
    auto genAndSort = [&uid, &gen](std::vector<int> &v, const std::size_t size)
    {
        std::generate(v.begin(), v.begin() + size, [&uid, &gen]
            { return uid(gen); } );
        std::sort(v.begin(), v.begin() + size);
    };
    auto print_v = [](const std::vector<int> &v)
    {
        std::copy(v.cbegin(), v.cend(), int_output(std::cout, " ") );
        std::cout << std::endl;
    };
 
    genAndSort(v1, N);
    genAndSort(v2, M);
    print_v(v1);
    print_v(v2);
    std::merge(v1.begin(), v1.begin() + N, v2.begin(), v2.begin() + M,
        std::back_inserter(v3));
    print_v(v3);
}
http://liveworkspace.org/code/nUNEb
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 00:09     Слить два упорядоченных массива в третий
Еще ссылки по теме:

Дано два одномерных массива, создать третий массив который содержит элементы первого массива C++
C++ Объединить два упорядоченных массива
Объединить два упорядоченных по возрастанию массива в один C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Basill
 Аватар для Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
20.03.2013, 00:09     Слить два упорядоченных массива в третий #10
2 масива слил в 3ий + отсортировал все

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
 
int main()
{setlocale (LC_ALL, "Russian");
 
 int i,j,n,m,x,a,b,t,c,d,f;
 
 int *arr1,*arr2,*arr3;
 
 cout<<"Введите количество элементов 1 массива: \n";
 cin >> n;
     arr1 = new int [ n ];
      
     for (int i=0; i<n; i++)
        {
        cout<<"Введите элемент 1 неупорядоченного массива="; cin>> arr1[i];
         }
            for (a=1; a<n; a++) 
            for (b=n-1; b>=a; b--)      
           {
            if (arr1[b-1] > arr1[b]) 
              {
                t = arr1[b-1];
                arr1[b-1] = arr1[b];
                arr1[b] = t;
              }
           }
cout<<endl;
 
 
 cout<<"Введите количество элементов 2 массива: \n";
 cin >> m;
     arr2 = new int [ m ];
      
     for (int j=0; j<m; j++)
        {
        cout<<"Введите элемент 2 неупорядоченного массива="; cin>> arr2[j];
         }
            for (c=1; c<m; c++) 
            for (d=m-1; d>=c; d--)
          {
            if (arr2[d-1] > arr2[d]) 
            {
                f = arr2[d-1];
                arr2[d-1] = arr2[d];
                arr2[d] = f;
            }
            }
cout<<"Упорядоченный 1 массив:\n";
    for(t=0; t<n; t++) cout<<arr1[t]<<endl;
cout<<"Упорядоченный 2 массив:\n";
for(f=0; f<m; f++) cout<<arr2[f]<<endl;
cout<<endl;
 
 
x = n + m;
arr3 = new int[x];
 
   int arr1Pos = 0;
   int arr2Pos = 0;
   int arr3Pos = 0;
   
   while ( true ) {
      arr3[ arr3Pos++ ] = ( arr1[ arr1Pos ] < arr2[ arr2Pos ]) ? arr1[ arr1Pos++ ] : arr2[ arr2Pos++ ];
      
      if ( arr1Pos == n ) {
         while ( arr2Pos < m )
            arr3[ arr3Pos++ ] = arr2[ arr2Pos++ ];
         
         break;
      }
      
      if ( arr2Pos == m ) {
         while ( arr1Pos < n )
            arr3[ arr3Pos++ ] = arr1[ arr1Pos++ ];
         
         break;
      }
   }
 
 
   cout<<"Упорядоченный 3 массив:\n"; 
   for (int k=0; k<x; k++)
   {
       cout<<arr3[k]<<endl;
   }
 
 
_getch();
return 0;
}
Yandex
Объявления
20.03.2013, 00:09     Слить два упорядоченных массива в третий
Ответ Создать тему
Опции темы

Текущее время: 12:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru