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

Задача на сортировку массивов - C++

Восстановить пароль Регистрация
 
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
18.11.2013, 17:09     Задача на сортировку массивов #1
Сформировать с помощью датчика случайных чисел в диапазоне [0,20] два массива C и D, из 20 элементов целого типа каждый. Вывести их на экран. Отсортировать массивы C и D по возрастанию и сформировать из них массив E, таким образом, чтобы он также был отсортирован.

Суть такова, что я понял как сортировать 2 массива - сравнивать C[i] и D[j] и тот, который меньше, заносить в E[k], но не могу сообразить что делать когда они равны, попытался сделать условие меньше, либо равно и присваивать E[k] - меньший элемент, а к E[k+1] элемент равный ему, но чот неправильно видимо ( заранее спасибо

Вот мой код :

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
#include <stdlib.h>
#include <stdio.h>
int const N=20;
int random (int N) { return rand()%N; }
main()
{  
  int i,j,k,a=0,b=20,C[N],D[N],E[2*N],temp;
  int p=0;
  printf("Массив C\n");
  for ( i = 0;i<N;i++)
     {
           C[i]=random ( b - a + 1 ) + a;
           printf("%d\n",C[i]);
     }
   printf("Массив D\n");  
     for ( i = 0;i<N;i++)
     {
           D[i]=random ( b - a + 1 ) + a;
           printf("%d\n",D[i]);
     }  
 
  for ( i = 0; i < N-1; i ++ ) 
    for ( j = N-2; j >= i; j -- ){
      if (C[j]>C[j+1]) 
      {
        temp = C[j]; 
        C[j] = C[j+1]; 
        C[j+1] = temp;
      }
      
        if (D[j]>D[j+1])
      {
        temp = D[j]; 
        D[j] = D[j+1]; 
        D[j+1] = temp;
      }
      }
     printf("\n Отсортированный массив C:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", C[i]);
     
     printf("\n Отсортированный массив D:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", D[i]);
     
     
     for ( i=0,j=0,k=0;k<N*2;k++)
        {
          if(C[i]<=D[j]) {
                          E[k] = C[i];
                          E[k+1] = D[j];
                          k=k+2;
                          i++;
                          }
        {
          if(C[i]>D[j]) {
                         E[k] = D[j];
                         j++;
                         }                                         
        }
        }
        printf("\n Отсортированный массив E:\n");
        for( k = 0; k<2*N;k++ )
           printf("%d\n",E[k]);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
18.11.2013, 17:14     Задача на сортировку массивов #2
Цитата Сообщение от Demiar Посмотреть сообщение
но не могу сообразить что делать когда они равны
и думать не надо, если они равны, то без разницы какой первее попадет в массив Е.
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
18.11.2013, 17:43  [ТС]     Задача на сортировку массивов #3
это то понятно, но что не так в проге? помогите)

Добавлено через 3 минуты
вернее что исправить?
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 17:48     Задача на сортировку массивов #4
C++
1
2
3
4
5
6
7
8
9
10
if(i < N && C[i] < D[j])
{
    E[k] = C[i];
    i++;
}
else
{
    E[k] = D[j];
    j++;
}
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
18.11.2013, 18:02  [ТС]     Задача на сортировку массивов #5
не пашет, в конце почему-то выводит 2 элемента 0 и 5

Добавлено через 18 секунд
так ведь ?

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
#include <stdlib.h>
#include <stdio.h>
int const N=20;
int random (int N) { return rand()%N; }
main()
{  
  int i,j,k,a=0,b=20,C[N],D[N],E[2*N],temp;
  int p=0;
  printf("ГЊГ*Г±Г±ГЁГў C\n");
  for ( i = 0;i<N;i++)
     {
           C[i]=random ( b - a + 1 ) + a;
           printf("%d\n",C[i]);
     }
   printf("ГЊГ*Г±Г±ГЁГў D\n");  
     for ( i = 0;i<N;i++)
     {
           D[i]=random ( b - a + 1 ) + a;
           printf("%d\n",D[i]);
     }  
 
  for ( i = 0; i < N-1; i ++ ) 
    for ( j = N-2; j >= i; j -- ){
      if (C[j]>C[j+1]) 
      {
        temp = C[j]; 
        C[j] = C[j+1]; 
        C[j+1] = temp;
      }
      
        if (D[j]>D[j+1])
      {
        temp = D[j]; 
        D[j] = D[j+1]; 
        D[j+1] = temp;
      }
      }
     printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў C:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", C[i]);
     
     printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў D:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", D[i]);
     
     
     for ( i=0,j=0,k=0;k<N*2;k++)
        {
         
 
        
        
        if(i < N && C[i] < D[j])
{
    E[k] = C[i];
    i++;
}
else
{
    E[k] = D[j];
    j++;
}
        
        
}    
        
        
        
        printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў E:\n");
        for( k = 0; k<2*N;k++ )
           printf("%d\n",E[k]);
                
 
 
 
       
 
 
      
          
      
  system("PAUSE");
  return 0;
}
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 18:08     Задача на сортировку массивов #6
Попробуйте поменять < на <= в условии.
Yandex
Объявления
18.11.2013, 18:08     Задача на сортировку массивов
Ответ Создать тему
Опции темы

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